有一个服务器,它发送AVCDecoderConfigurationRecord标签和连续的H264视频标签。在客户端,我使用NetStream和appendBytes(数据生成模式)来显示视频。代码喜欢
video = new Video
addChild(vdieo)
socket = new Socket
socket.connect(server)
socket.addEventListener(SOCEKT_DATA, onRecv)
nc = new NetConnection
nc.connect(null)
ns = new NetStream(nc)
ns.client = this
ns.play(null)
video.attachNetStream(ns)
function onRecv(e) : void {
data = new ByteArray
socket.readBytes(data)
if (data-is-AVCDecoderConfigurationRecord-tag) {
ns.appendBytesAction(RESET_BEGIN)
}
ns.appendBytes(data)
}
客户端正常工作,NetStream不会开始对视频进行处理,直到它将大约20个标记缓存到缓冲区中(大约2秒,因为fps为10)。 我不能满足我的要求,即我需要在客户端收到标签时立即播放流。我设置bufferTime = 0或其他小数字,没有效果,像往常一样等待大约20个标签。虽然我将bufferTime设置得更大,例如5,但NetStream会等待更多标签。
END_SEQUENCE 常量
public static const END_SEQUENCE:String =“endSequence” 表示媒体流数据已完成。对于某些编解码器,例如H.264,字节解析器在开始播放之前等待缓冲区填充到某个点。传递END_SEQUENCE以告诉字节解析器立即开始播放。
在Adobe文档中,我发现了这些信息,并尝试使用END_SEQUENCE的几种方法,但所有这些方法都不起作用。 有没有办法在没有缓冲区的情况下立即播放H264标签?