手动更改 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 带宽?的主要内容,如果未能解决你的问题,请参考以下文章