无法在16776秒之后寻求

时间:2013-01-23 14:57:29

标签: actionscript-3 netstream

我有一个播放录音(只有音频)的自定义播放器。如果音频文件很长,则NetStream类不能很好地搜索它。我发现在16776秒(04:39:36)之后,NetStream搜索功能从文件的开头再次启动。这是最短的伪代码:

package com.name.player
{
    import flash.net.NetConnection;
    import flash.net.NetStream;
    ...

    public class StreamingPlayer extends Sprite
    {
        public var maStream:NetStream;
        ...

        public function aFunction
        {
            maStream = new NetStream( maConnection );
            maStream.inBufferSeek = true; // ==> Generates compile error: 
            //Error: Access of possibly undefined property inBufferSeek through a reference with static type flash.net:NetStream.
            //    [mxmlc] 
            //    [mxmlc]             maStream.inBufferSeek = true;
            //    [mxmlc]                      ^

            maStream.play('sName', 0, -1, true);
            // Now try these (one at a time)
            maStream.seek(16775); // Seeks to the desired position and plays the file till the end
            maStream.seek(16776); // Seeks at second 0 ( begining )
            maStream.seek(16778); // Seeks at second 0 ( begining )
            maStream.seek(16780); // Seeks at second 3
            maStream.seek(16786); // Seeks at second 9
            maStream.seek(16796); // Seeks at second 19
            ...

        }
        ...
    }
    ...
}

我尝试了不同的格式(speex,wav)/代码/比特率:
  - RIFF(小端)数据,WAVE音频,ITU G.711 A-law,单声道8000 Hz
  - RIFF(小端)数据,WAVE音频,Microsoft PCM,16位,单声道44100 Hz
  - Ogg数据,Speex音频

文件大小或总长度无关紧要,我尝试介于1.1 - 1500 MB和04:40:00(17000秒)至14:56:41(53801秒)之间。

我正在使用html5用于新浏览器,但我们仍然需要支持旧浏览器(在某些客户端PC上无法更新安装新软件,所以我需要一个闪存解决方案,因为Flash已经安装并且沿着IE6跑步:()。

问:
我做错了什么或NetStreamer有限制,如果有什么解决方案我必须能够播放这些长文件吗?

P.S。这是我第一次使用flash,所以如果你有答案/评论,请尝试更明确一点。

编辑:在Adobe ID 3492103上添加了错误。

修改
我有一位同事测试流服务器,他发现了日志中的一些内容:

// This is lower than 16776 seconds, and works
01-26 13:02:14.277  RtmpProtocol:891        [ID-007] Seeking to 1594380
...
01-26 13:02:14.279  FileReaderWav:194       [ID-007] <Stream0001> Seeking to 15943804 sf_seek 127550432
...
01-26 13:02:16.250  FileReaderWav:230       [ID-007] <Stream0001> Current position: 15943824

// This is when it plays from the beginning (seeking after 16776 seconds)
// according to the log it should just play at the desired position, but it's not
01-26 13:02:23.294  RtmpProtocol:891        [ID-007] Seeking to 16990012
01-26 13:02:23.303  FileReaderWav:194       [ID-007] <Stream0001> Seeking to 16990012 sf_seek 135920096
01-26 13:02:23.463  FileReaderWav:230       [ID-007] <Stream0001> Current position: 16990032

我们migth在流服务器,某些INTEGER转换或类似的东西中有问题。如果我得到更多信息,我会更新。

谢谢

1 个答案:

答案 0 :(得分:2)

我认为你必须考虑文件是否完全缓冲到所需的搜索位置。如果您正在尝试 STREAM 一个文件(也就是未完全加载)并寻找未完全加载的文件的位置...它将生成错误,或者只是不去那里。

解:

(1)确保在搜索之前将文件缓冲到该位置

(2)使用PHP(或任何服务器端)为您提供文件 AT 所需的点。这样可以节省带宽,因为只传递请求的数据。

EG。如果您要求的文件是1500mb,但您只需要800-1500mb ...然后在该位置提供文件。