我想做一个基本的,支离破碎的mp4广播节目与avformat和HTML5视频和味精。
这是一个活动流,我使用avformat将h264数据复制到mp4片段中。
下面是连接到流的客户端的基本绘图:

因此,用文字:
reuse
Client1)
上加入到流中。
我已经从两个客户端将一个mp4文件保存到磁盘。
原子在两个文件中的顺序看起来很好: ftype,moov,moof,mdat,moof,mdat.
这两个文件都可以由媒体播放器(如VLC)播放,也可以在浏览器中直接播放(Opera)。
Client1也可以通过浏览器(Opera)中的MSE播放,但是Client2 2的流不显示在MSE (Opera)中。
JS控制台上没有错误,媒体内部看起来也不错(至少与Client1 1的版本相当)。
现在我意识到,每个moof框都包含一个带有sequenceNumber字段的mfhd框(标头)。
当然,在Client1 1的第一个moof框中,这个sequenceNumber是1。但是,在后面加入的Client2 2的第一个moof框中,这个sequenceNumber始终是>= 1 (在我的例子中是16)。
我需要在Client2中的moof框中修改什么才能从一开始就有一个有效的fmp4?
我认为Opera的HTML5视频不喜欢sequenceNumber不是从1开始的,但是对于它的有效性还有其他的要求。
发布于 2021-06-21 19:04:11
一旦缓冲了一些视频,就必须将JS中video元素上的video设置为最新的buffered.end(0)时间(假设您有一个缓冲范围)。
问题是,您正在播放的视频被浏览器解释为开始于时间为零,但您正在为以后的时间添加MSE片段。
发布于 2021-09-10 19:00:06
所有moof框都包含有关播放顺序的信息。MSE预计,默认情况下,视频将在时间0开始。
解决此问题的一个简单解决方案是在追加第一个缓冲区后将HTMLMediaElement.currentTime属性设置为高值。或者,为了支持MSE规范,您提供给MSE缓冲区的第一个moof框应该有first_sample_flags_present标志。
https://stackoverflow.com/questions/60580531
复制相似问题