2014-01-28 6 views
2

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

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

  • 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: с помощью видео, 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 формат, который я хочу t o использовать для этого проекта. Могу добавить, что я использую кодек H.264 для этих файлов .MP4.

Есть ли что-нибудь, что я делаю неправильно?

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

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

ответ

1

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

Особых соображений для видео H.264 в среде AIR 3.0 для прошивки

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. 

+0

Спасибо, Билл. Я не уверен, чтобы полностью понять разницу между передачей URL-адреса файла и видео-буфера, но мне определенно нужно сделать еще немного исследований по этому вопросу. Я посмотрю, могу ли я использовать другую кодировку для этого проекта, если нет других ответов. –

+0

У вас есть решение? У меня такой же вопрос. – ketan

+0

Формат для передачи по URL-адресу один и тот же, просто для потокового видео вам нужно видео в формате HLS (с суффиксом .m3u8, файл списка воспроизведения для содержимого потока). Трудно следовать, но примеры приведены на https://developer.apple.com/streaming/, с некоторыми примерами воспроизводимых потоков на https://developer.apple.com/streaming/examples/basic-stream.html –

0

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