Chrome、MSE 增加缓冲区?

Chrome、MSE 增加缓冲区?

我正在寻找一种方法来增加 MSE 正在使用的视频/音频缓冲区。

由于连接速度慢,我的媒体不断暂停/恢复:

播放:

audio_buffering_state   {"state":"BUFFERING_HAVE_ENOUGH"}
dimensions  "1920x804"
duration    6988.2307
event   "kPlay"
info    "D3D11VideoDecoder is using array texture"
kAudioDecoderName   "FFmpegAudioDecoder"
kAudioTracks    [{"bytes per channel":4,"bytes per frame":8,"channel layout":"STEREO","channels":2,"codec":"mp3","codec delay":529,"discard decoder delay":true,"encryption scheme":"Unencrypted","has extra data":false,"profile":"unknown","sample format":"Float 32-bit","samples per second":48000,"seek preroll":"0us"}]
kFrameTitle "Movies"
kFrameUrl   xxx
kFramerate  24
kIsAudioDecryptingDemuxerStream false
kIsPlatformAudioDecoder false
kIsPlatformVideoDecoder true
kIsVideoDecryptingDemuxerStream false
kRendererName   "RendererImpl"
kResolution "1920x804"
kTextTracks []
kVideoDecoderName   "D3D11VideoDecoder"
kVideoPlaybackFreezing  0.025359
kVideoPlaybackRoughness 7.281
kVideoTracks    [{"alpha mode":"is_opaque","codec":"h264","coded size":"1920x804","color space":"{primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED}","encryption scheme":"Unencrypted","has extra data":false,"hdr metadata":"unset","natural size":"1920x804","orientation":"0°","profile":"h264 high","visible rect":"0,0 1920x804"}]
origin_url  xxx
pipeline_buffering_state    {"for_suspended_start":false,"state":"BUFFERING_HAVE_ENOUGH"}
pipeline_state  "kPlaying"
player_id   0
render_id   1759
seek_target 2922.002022
url xxx
video_buffering_state   {"state":"BUFFERING_HAVE_ENOUGH"}

然后暂停几秒钟:

audio_buffering_state   {"reason":"DEMUXER_UNDERFLOW","state":"BUFFERING_HAVE_NOTHING"}
dimensions  "1920x804"
duration    6988.2307
event   "kPlay"
info    "D3D11VideoDecoder is using array texture"
kAudioDecoderName   "FFmpegAudioDecoder"
kAudioTracks    [{"bytes per channel":4,"bytes per frame":8,"channel layout":"STEREO","channels":2,"codec":"mp3","codec delay":529,"discard decoder delay":true,"encryption scheme":"Unencrypted","has extra data":false,"profile":"unknown","sample format":"Float 32-bit","samples per second":48000,"seek preroll":"0us"}]
kFrameTitle "Movies"
kFrameUrl   xxx
kFramerate  24
kIsAudioDecryptingDemuxerStream false
kIsPlatformAudioDecoder false
kIsPlatformVideoDecoder true
kIsVideoDecryptingDemuxerStream false
kRendererName   "RendererImpl"
kResolution "1920x804"
kTextTracks []
kVideoDecoderName   "D3D11VideoDecoder"
kVideoPlaybackFreezing  0.025359
kVideoPlaybackRoughness 7.281
kVideoTracks    [{"alpha mode":"is_opaque","codec":"h264","coded size":"1920x804","color space":"{primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED}","encryption scheme":"Unencrypted","has extra data":false,"hdr metadata":"unset","natural size":"1920x804","orientation":"0°","profile":"h264 high","visible rect":"0,0 1920x804"}]
origin_url  xxx
pipeline_buffering_state    {"for_suspended_start":false,"reason":"DEMUXER_UNDERFLOW","state":"BUFFERING_HAVE_NOTHING"}
pipeline_state  "kPlaying"
player_id   0
render_id   1759
seek_target 2922.002022
url xxx
video_buffering_state   {"state":"BUFFERING_HAVE_ENOUGH"}

您可以看到这显然是一个缓冲区问题,如果我可以拥有更大的缓冲区,它就可以承受更多的带宽问题,因为媒体是h264基于的,我们可以假设它不是 CBR 编码的,因此缓冲区可以大大提高媒体体验。我当然可以牺牲一些初始或缓冲延迟/等待时间。

如何在 Windows 下的 Chrome 中更改 MSE 的媒体缓冲区大小?

答案1

媒体源扩展 是浏览器 API 的标准,目前所有主流浏览器都通过浏览器发布的 JavaScript 函数实现该标准。

您将在 网页 作者 Nick Desaulniers,您可以下载 来源 以供进一步研究。

下图可以最好地解释参与视频流的主要对象:

在此处输入图片描述

您可能希望修改其大小的主要元素是 媒体源源缓冲区

但是,如果您检查这两个函数的 API 调用,您会发现,令人吃惊的是,根本找不到缓冲区大小参数。实际上,这是设计使然。您唯一的选择是在 JavaScript 播放器中向 MediaSource 对象请求缓冲区并将其附加到 SourceBuffer 缓冲区。

在文章中 超出缓冲配额 从 2019 年开始,Joseph Medley 研究了 SourceBuffer 对象在出现错误之前可以包含多少数据的问题。他对每个浏览器的发现如下:

在此处输入图片描述

结论:MSE 内部缓存已编入浏览器,无法修改。唯一的选择是让 JavaScript 播放器自己进行缓存,方法是请求并将更多缓冲区附加到 SourceBuffer 对象。但是,在我碰巧使用的任何 Web 播放器中,我都没有看到这样的选项。

(以上讨论与 HTML5 视频无关,因为 HTML5 视频也没有缓冲区大小参数。)

答案2

在 Firefox 中,media.mediasource.enabled通过设置为 来禁用它false。然后设置media.cache_readahead_limit9999media.cache_resume_treshold设置为9999。此设置设置默认情况下预加载多少秒的播放时间。所有 Youtube 视频都已 100% 加载,并且 2 小时以上的视频加载时间不到一秒(无论如何,以我的互联网速度)。如果它使视频缓冲如此缓慢和迟缓,我不确定为什么你甚至想要启用 MSE。现代网络标准怎么会有 150 MB 的微小最大缓冲区?这是 2000 年吗?

相关内容