我目前正在使用视频播放器在我的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:使用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是我想用于这个项目的格式。我可能会补充一点,我正在为这些.MP4文件使用H.264编解码器。
我有什么问题吗?
请注意,只要我使用模拟器,两种格式都有效,只有在我的iPad上部署应用程序时才会出现.MP4问题。
这是一个移动 Flex 4.6 项目,使用 AIR 3.9 Flash Builder 4.7 Windows 7 Pro
答案 0 :(得分:1)
使用RTMP的iOS设备不支持H.264视频,如果不使用HTTP Live Streaming协议,我认为它不起作用。以下是NetStream.play的ActionScript参考的一部分:
AIR 3.0 for iOS中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.
答案 1 :(得分:0)
这并不容易,但如果你真的想在iOS上使用H264而不是RTMP,你可以添加一个控制iOS RTMP视频播放应用程序(本机)的ANE。有一些小公司为iOS制作RTMP H264视频播放器。