我有一个播放录音(只有音频)的自定义播放器。如果音频文件很长,则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转换或类似的东西中有问题。如果我得到更多信息,我会更新。
谢谢
答案 0 :(得分:2)
我认为你必须考虑文件是否完全缓冲到所需的搜索位置。如果您正在尝试 STREAM 一个文件(也就是未完全加载)并寻找未完全加载的文件的位置...它将生成错误,或者只是不去那里。
解:
(1)确保在搜索之前将文件缓冲到该位置
(2)使用PHP(或任何服务器端)为您提供文件 AT 所需的点。这样可以节省带宽,因为只传递请求的数据。
EG。如果您要求的文件是1500mb,但您只需要800-1500mb ...然后在该位置提供文件。