В настоящее время я борюсь с мобильным проектом 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
Спасибо, Билл. Я не уверен, чтобы полностью понять разницу между передачей URL-адреса файла и видео-буфера, но мне определенно нужно сделать еще немного исследований по этому вопросу. Я посмотрю, могу ли я использовать другую кодировку для этого проекта, если нет других ответов. –
У вас есть решение? У меня такой же вопрос. – ketan
Формат для передачи по URL-адресу один и тот же, просто для потокового видео вам нужно видео в формате HLS (с суффиксом .m3u8, файл списка воспроизведения для содержимого потока). Трудно следовать, но примеры приведены на https://developer.apple.com/streaming/, с некоторыми примерами воспроизводимых потоков на https://developer.apple.com/streaming/examples/basic-stream.html –