MP4-видео остается скрытым в мобильном приложении Flex

В настоящее время я борюсь за свой мобильный проект Flex с использованием видеоплеера. По сути, проблема в том, что я, похоже, вообще не могу воспроизводить или, по крайней мере, видеть видео.MP4 (без видео, без звука, вид проигрывателя просто пустой) на мобильном устройстве iOS. Как только я заменяю источник видео.FLV, все работает отлично.

Я попробовал два подхода, хотя они используют одни и те же компоненты из того, что я понял.

  • OSMF: использование VideoElement, MediaPlayer, MediaContainer и MediaPlayerSprite.

        private var media:VideoElement;
        private var mediaPlayer:MediaPlayer;
        private var mediaContainer:MediaContainer;
        private var mediaSprite:MediaPlayerSprite;
    
    
        protected function onViewCreationComplete(event:FlexEvent):void
        {
            media = new VideoElement(new URLResource("http://10.140.1.165/jobs/92/eproofing/in/pages/versions/1/page1/video.mp4"));
            mediaPlayer = new MediaPlayer(media);
            mediaContainer = new MediaContainer();
            mediaContainer.addMediaElement(media);
            mediaSprite = new MediaPlayerSprite(mediaPlayer, mediaContainer);
            mediaSprite.addEventListener(MouseEvent.CLICK, onVideoSpriteClicked, false, 0, true);
            mediaSprite.mediaPlayer.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, onVideoTimeChanged);
    
            videoContainer.height = manager.selectedPage.formatHeight;
            videoContainer.width = manager.selectedPage.formatWidth;
            videoContainer.addChild(mediaSprite);
        }
    
  • StageVideo: использование Video, NetConnection и NetStream (использование объекта StageVideo еще не реализовано в следующем коде, это будет следующий шаг)

        private var video:Video;
        private var ns:NetStream;
        private var nc:NetConnection;
    
        private var isVideoPlaying:Boolean = false;
    
    
        protected function onViewCreationComplete(event:FlexEvent):void
        {
            video = new Video();
            nc = new NetConnection();
            nc.connect(null);
            ns = new NetStream(nc);
            ns.client = {onMetaData:onMetaData};
    
            ns.addEventListener(NetStatusEvent.NET_STATUS, onVideoLoaded);
            ns.play("http://10.140.1.165/jobs/92/eproofing/in/pages/versions/1/page1/video.mp4");
            this.isVideoPlaying = true;
        }
    
        private function onVideoLoaded(event:NetStatusEvent):void
        {
            video.attachNetStream(ns);
            videoContainer.addChild(video);
    
            videoContainer.height = video.height = video.videoHeight;
            videoContainer.width = video.width = video.videoWidth;
        }
    
        private function onMetaData(o:Object):void
        {
    
        }
    

Оба дали мне один и тот же результат: видео появляется и воспроизводится правильно, пока я использую.FLV, я ничего не вижу / не слышу, как только загружаю видео в формате.MP4. И, конечно, MP4 формат, который я хочу использовать для этого проекта. Могу добавить, что я использую кодек H.264 для этих файлов.MP4.

Что-то я делаю не так?

Обратите внимание, что оба формата работают до тех пор, пока я использую эмулятор, проблема.MP4 возникает только при развертывании приложения на моем iPad.

Это мобильный проект Flex 4.6, использующий AIR 3.9 в Flash Builder 4.7 для Windows 7 Pro

2 ответа

Решение

Видео H.264 не поддерживается на устройствах iOS с RTMP, и я не видел, чтобы оно работало без использования протокола HTTP Live Streaming. Вот раздел из ссылки на ActionScript для NetStream.play:

Особые замечания по видео H.264 в AIR 3.0 для iOS

For H.264 video, the iOS APIs for video playback accept only a URL to a file or
stream. You cannot pass in a buffer of H264 video data to be decoded. Depending
on your video source, pass the appropriate argument to NetStream.play() as
follows:   

- For progressive playback: Pass the URL of the file (local or remote).

- For streaming video: Pass the URL of a playlist in Apple's HTTP Live Streaming
(HLS) format. This file can be hosted by any server; Flash Media Server 4.5 and
higher has the advantage of being able to encode streams in HLS format.

Это непросто, но если вы действительно хотите использовать H264 поверх RTMP на iOS, вы можете добавить ANE, управляющий iOS RTMP Video Play App(нативно). Есть несколько небольших компаний, которые делают RTMP H264 видеоплееры для iOS.

Другие вопросы по тегам