手动更改 HLS 带宽?

Posted

技术标签:

【中文标题】手动更改 HLS 带宽?【英文标题】:Change HLS bandwidth manually? 【发布时间】:2014-02-26 11:09:16 【问题描述】:

在 HLS 中流式传输视频时是否可以手动切换带宽?我的意思是视频点播,而不是直播视频。

HLS:http://en.wikipedia.org/wiki/HTTP_Live_Streaming

看起来像 youtube 切换质量。 还有商业产品:http://www.longtailvideo.com/support/forums/jw-player/using-playlists/32487/hls-playlist/

【问题讨论】:

【参考方案1】:

您可以,只要您控制播放器和播放器的馈送逻辑,包括下载内容、确定正确的比特率流等。这适用于许多设备和许多应用程序/播放器,包括 youtube。 你不能在 ios 上。对于 iOS,您只能指定 PreferredPeakBitRate(AVPlayerItem 属性)并且不能(至少目前还不能)手动切换视频流。

【讨论】:

【参考方案2】:

是的,你可以。但是你会有一点清单文件解析。

在 HLS 世界中,一切都从清单文件开始:.m3u8

清单文件引用电影文件(切成小块)和其他内容,如字幕、音频等。

您通常会阅读一个主清单,其中引用了不同的子清单 - 每个视频编码质量一个 - 包含视频文件(.ts 文件)

即使使用加密流(如 Apple Fairplay DRM),清单也始终是清晰的原始文本文件。

以下是根据主清单文件中的相对带宽不同的视频变体示例:

#EXT-X-STREAM-INF:BANDWIDTH=409000,CODECS="mp4a.40.2,avc1.640015",RESOLUTION=480x270,AUDIO="audio-aacl-64",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE
sub-manifest-1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1409000,CODECS="mp4a.40.2,avc1.64001E",RESOLUTION=854x480,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE
sub-manifest-2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2469000,CODECS="mp4a.40.2,avc1.64001F",RESOLUTION=1280x720,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE
sub-manifest-3.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3953000,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1080,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE
sub-manifest-4.m3u8

在此示例中,只需解析此文件以检索 sub-manifest-1.m3u8 以获取相对于带宽为 409000 的子清单。 如果主清单 URL 为 http://myserver.com/path/mastermanifest.m3u8,则子清单 URL 将为 http://myserver.com/path/sub-manifest-1.m3u8

请注意,您可以直接拥有子清单文件的绝对 URL。在这种情况下,直接使用这些 URL。

【讨论】:

以上是关于手动更改 HLS 带宽?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ijkplayer 中更改 HLS 质量以获得颤振或替代解决方案?

ui-router 状态更改后销毁 hls.js 流

阿里云ecs 如何更改带宽收费方式

为啥按钮只会在手动更改输入后更改对象属性?

使用 CastPlayer 更改字幕

在 iOS SDK - AVPlayer 中手动选择视频质量的 HLS 流?