我目前使用视频播放器在Flex移动项目上挣扎。基本上,问题在于,我似乎无法在iOS移动设备上播放或至少看到.mp4视频(没有视频,没有声音,播放器视图简直是空的)。一旦我用.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:使用视频,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是我想用于此项目的格式。我可能会补充说,我正在为这些.mp4文件使用H.264编解码器。
有什么我做错了吗?
请注意,只要我使用仿真器,这两种格式都在工作,只有在我在iPad上部署应用程序时,.mp4问题才会发生。
这是移动 Flex 4.6 项目,使用 AIR 3.9 on Flash Builder 4.7 for Windows 7 Pro
h.264带有RTMP的iOS设备上不支持视频,而我没有看到它在不使用HTTP实时流式协议的情况下使用。这是NetStream.play的ActionScript参考的部分:
iOS 3.0中H.264视频的特殊注意事项
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.
这并不容易,但是如果您真的希望iOS上的RTMP上的H264,则可以添加控制iOS RTMP视频播放应用程序(本机)的ANE。有一些小型公司为iOS制作RTMP H264视频播放器。