我正在以“标准方式”播放循环FLV:
netstream.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
...
public function onStatus(item:Object):void {
if (item.info.code == "NetStream.Play.Stop") {
if (loop) netstream.seek(0);
}
通过Flash CS 5.5创作工具(测试影片或调试影片)播放时,视频无缝循环播放。 但是!在浏览器或独立调试Flash播放器(均为v.11.2.202.233)播放时,视频“倒带”之前会有大约1秒的异常暂停。
这是最新Flash播放器的错误吗?
答案 0 :(得分:10)
对于遇到相同问题的人,请尝试将上述代码更改为:
public function onStatus(item:Object):void {
if (item.info.code == "NetStream.Buffer.Empty") {
if (loop) netstream.seek(0);
}
它将摆脱闪烁。如果您收听“NetStream.Play.Stop”,则会导致闪烁。
您不需要嵌入任何东西。这在IOS,Android和PC上运行得很好。
答案 1 :(得分:3)
这是Flash Player 11+和AIR 3+的已知错误。错误报告在这里,你应该upvote& :https://bugbase.adobe.com/index.cfm?event=bug&id=3349340
将创建无缝循环的已知变通方法:
1)将视频嵌入SWF中。不理想,在某些情况下不可能。
2)创建双NetSteam对象并在它们之间切换。当ns1(两个NetStreams对象中的第一个)到达它结束时触发事件的示例:
if (e.info.code == "NetStream.Play.Stop"){
vid.attachNetStream(ns2);
ns2.resume();
activeNs = ns2;
ns1.seek(0);
ns1.pause();
}
在另一个事件侦听器上将ns1替换为ns2。无用的对象和处理程序重复,但你去了。
3)使用AIR 2.x / Flash Player 10.x(根本不是解决方案,Linux用户除外)
答案 2 :(得分:1)
我们在从Flash 10到Flash 11的过渡中注意到这一点.Flash 10无缝循环,但是当从NetStream.Play.Stop调用seek(0)时,Flash 11有一个〜1秒的停顿。
将媒体嵌入SWF不是我们的选择。
以下代码提供了一个更加无缝的循环 - 仍然不完美,但更好。
var mStream:NetStream;
var mDuration:Number;
...
addEventListener(Event.ENTER_FRAME, onEnterFrame);
...
function onEnterFrame(e:Event):void
{
if( mStream.time > (mDuration-0.05) )
{
if( mLooping )
{
mStream.seek(0);
}
}
}
function onMetaData(info:Object)
{
mDuration = info.duration;
}
希望它有所帮助。
答案 3 :(得分:1)
我似乎已经使用FLVPlayback组件以及一些提示实现了这一点。
更重要的是,它可以在台式机,iPhone 4S和3GS上无缝运行! (通过AIR应用程序)
_videoFLV = new FLVPlayback();
_videoFLV.fullScreenTakeOver = false;
_videoFLV.autoPlay = false;
_videoFLV.autoRewind = true;
_videoFLV.isLive = false;
_videoFLV.skin = null;
_videoFLV.y = 150;
_videoFLV.bufferTime = .1;
_videoFLV.width = 320;
_videoFLV.height = 320;
_videoFLV.addEventListener(MetadataEvent.CUE_POINT, video_cp_listener, false, 0, true);
_videoFLV.source = "includes/10sec.flv";
addChild(_videoFLV);
使用侦听器功能......
function video_cp_listener(eventObject:MetadataEvent):void {
if (eventObject.info.name == "endpoint") {
_videoFLV.seek(0);
_videoFLV.play();
}
}
重要的是,我认为您必须设置宽度和高度以匹配您的flv文件。即无任何扩展。
flv在文件结尾之前添加了一个名为“endpoint”的提示点(假设你的开始和结束帧是相同的。)我使用Adobe Media Encoder添加了这个。
答案 4 :(得分:0)
无缝循环flv的唯一方法是嵌入swf内部。它会转换为MovieClip,然后您可以使用play(),stop(),nextFrame(),prevFrame()等处理它。
嵌入Flash创作工具(在舞台上拖动flv文件)时,请确保选择: