1

我有一个自定义播放器可以播放录音(仅音频)。如果音频文件很长,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 解决方案,因为 Flash 已经安装并一起运行IE6:()。

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

PS这是我第一次使用Flash,所以如果您有答案/评论,请尝试更明确一点。

编辑:在 Adob​​e 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

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

谢谢

4

1 回答 1

2

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

解决方案:

(1) 确保文件在查找前缓冲到该位置

(2) 使用 PHP(或任何服务器端)在所需位置为您提供文件。这将为您节省带宽,因为只会传递请求的数据。

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

于 2013-01-24T21:10:27.950 回答