2

我正在以“标准方式”播放循环 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 播放器的错误吗?

4

5 回答 5

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 上运行良好。

于 2012-09-20T08:02:26.677 回答
3

这是 Flash Player 11+ 和 AIR 3+ 的已知错误。错误报告在这里,您应该投票赞成 & :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 用户除外)

于 2013-10-24T22:45:10.947 回答
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;
}

希望能帮助到你。

于 2012-05-02T00:45:25.227 回答
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”的提示点,在文件结尾之前添加了 1 帧(假设您的开始和结束帧相同,这将是必需的)。我使用 Adob​​e Media Encoder 添加了这个。

于 2012-11-01T19:38:59.247 回答
0

无缝循环flv的唯一方法是嵌入到swf中。它被转换为MovieClip,然后您使用 play()、stop()、nextFrame()、prevFrame() 等对其进行处理。

在 Flash 创作工具中嵌入时(在舞台上拖动 flv 文件),请确保您选择:

  • “在 SWF 中嵌入 FLV...”
  • 符号类型:“电影剪辑”
  • 全部选中:“将实例放在舞台上”、“扩展时间线...”、“包括音频”
于 2012-04-26T06:11:57.553 回答