Cross browser 在HLS跨浏览器播放h.264 mpeg ts的情况下,如何在不跳过任何帧的情况下逐帧执行?
我似乎无法通过视频进入某些帧,比如00:00:04:24Cross browser 在HLS跨浏览器播放h.264 mpeg ts的情况下,如何在不跳过任何帧的情况下逐帧执行?,cross-browser,h.264,video.js,http-live-streaming,mpeg2-ts,Cross Browser,H.264,Video.js,Http Live Streaming,Mpeg2 Ts,我似乎无法通过视频进入某些帧,比如00:00:04:24 // javascript videojs("player").currentTime(4.96); // for 25 fps video 这是发生在每一秒的任何视频关闭共和党长度25 我想要实现的就是当我的用户觉得需要时,一帧一帧地(不跳过任何一帧)浏览视频 我正在使用的东西: videojs 5.11.9/5.19.1 videojs contrib hls 4.0.3/5.4.1 videojs逐帧 Chrome 57.0.2
// javascript
videojs("player").currentTime(4.96); // for 25 fps video
这是发生在每一秒的任何视频关闭共和党长度25
我想要实现的就是当我的用户觉得需要时,一帧一帧地(不跳过任何一帧)浏览视频
我正在使用的东西:
- videojs 5.11.9/5.19.1
- videojs contrib hls 4.0.3/5.4.1
- videojs逐帧
- Chrome 57.0.2987.133(64位)/Firefox 51.0.1(32位)
- Windows 7(64位)
videojs("player").currentTime(4.002128);
这就引出了00:00:04:00。所有停留在00:00:04:00的电话也是如此
videojs("player").currentTime(4); // should be **00:00:03:23**
videojs("player").currentTime(4.04); // should be **00:00:03:24**
videojs("player").currentTime(4.08); // should be **00:00:04:00**, correct
但是这个
videojs("player").currentTime(3.999999999999999);
将带我到00:00:03:23,实际上完全跳过00:00:03:24
奇怪的是,当我把共和党的长度改为50时,同样的事情只会每2秒发生一次。意思是我可以跳到00:00:02:24,00:00:04:24,但仍然不能跳到00:00:03:24
videojs("player").currentTime(4); // should be **00:00:03:23**
videojs("player").currentTime(4.04); // should be **00:00:03:24**
videojs("player").currentTime(4.08); // should be **00:00:04:00**, correct
闭合的GOP长度25(GOP M=2,N=25)的布局每秒钟看起来如下:
易卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜卜
对于一个闭合的GOP,每秒钟的长度50(gopm=2,N=50)是这样的:
IBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPB
这让我怀疑每一个共和党结束时的p-frame都出了问题
由于我自己对GOP的工作原理了解有限,我搜索了I/p/B框架的其他可能布局。然后我看到打开了GOP。使用ffmpeg,我使用-flags-cgop重新编码视频,如下所示
开放式GOP M=5,N=25
IBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
或开放性GOP M=2,N=50
ibpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpbpb
这两个开放的共和党视频都可以跳转到任何帧。还有一个问题
开放式共和党“解决方案”的问题
HLS播放列表不再只下载视频的所需/播放部分,而是从一开始就尝试一个接一个地下载视频片段。也许是因为现在每一个共和党的末尾的B帧要求下一个共和党
寻找更多
当我把这个问题打出来的时候,我寻找了更多的答案,发现了。该帖子中的人提出了两件事:
为Chrome重新编码不带B帧的视频
IE11、Safari8、Firefox34返回,然后精确搜索帧
下面测试第一个建议
关闭的GOP M=1,N=25
IPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
和闭合GOP M=1,N=50
IPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
两个都成功了!(速度不太快,在Firefox上不起作用)
详细信息(Firefox)
还记得你的第二个建议吗?起初,当我尝试Firefox与任何GOP长度25的视频,他们都很好(在寻找帧准确)。但在处理GOP长度50(M=1和M=2)和GOP长度25(M=1)时,它的问题与Chrome类似
但是这个
videojs("player").currentTime(2); // should be **00:00:02:00**
随机给我00:00:02:00或00:00:02:01(偏向后者,同时反复只拨打这一行)
发现这一点的一个简单方法是使用videojs逐帧连续前进25帧。你会得到00:00:02:01,00:00:03:01,00:00:04:01,然后突然出现00:00:05:00。在那里停下来,来回移动1帧,您可能无法每次回到00:00:05:00
编辑部分开始
在提问之前进行更多搜索数据
遇到。快两年了。还有一个可下载的可变GOP长度的视频样本
其布局(前几个GOP)
ibpbpppppp
IPPP
IPPBPBPPPP
ibpppbpp
IPBPPPP
ibpppppppppppppbp
下面是我用来显示框架类型布局的内容
这是一个小的awk程序(iframe.awk)
编辑部分结束
问题
很抱歉发了这么长的帖子,谢谢你通读
这是否意味着有些事情需要解决?(虫子?)
videojs是否参与了这个bug的创建
编写我们自己的播放器会有帮助吗
在当前的浏览器/脚本版本中,是否可以使用HTML5 videojs HLS player以一种格式跨浏览器(至少是Chrome和Firefox)逐帧搜索
(补充问题)是否同意或不同意
(补充问题)这是一个整体上不好的问题吗?太久了
感谢您为解决此问题提供的任何帮助和/或建议!谢谢 你有没有找到一个跨浏览器工作的GOP配置?不幸的是,没有。但我很久以前就停止了搜索,所以我不确定现在是否有任何一个配置可以工作。
videojs("player").currentTime(2); // should be **00:00:02:00**
// command prompt or bash
ffprobe -show_frames -select_streams 0 video.ts | awk -f iframe.awk
BEGIN {
FS="=";i="";
}
/pict_type/{
if (match($2, "I")) {
print i;
i=$2;
} else {
i=i$2;
}
}
END {
print i;
}