首页 文章

Windows Azure Media Services动态打包 - 如何在HLS中更改流顺序?

提问于
浏览
1

(TLDR摘要: I need a way to adjust the initial stream in the m3u8 file produced by Azure Media Services dynamic packaging, on a per-request basis.

目前我有很多资产,我使用动态包装来访问 . 我正在使用自适应比特率流,因此资产容器包含8个不同质量的流,动态打包使用以“ . ism / Manifest(格式= m3u8-aapl)结尾的URL结合m3u8播放列表)“ . 这几乎完全符合我的需要 .

我使用自定义XML编码,这基本上是H264AdaptiveBitrateMP4Set720p配置,但启用了自动旋转 . 这已经将比特率文件编码从高达3400到400(加上2个音频文件) .

问题在于:我通过自适应比特率流传输到iOS应用程序 . 很多视频都是5-15秒 . 通常需要在初始比特率下播放10秒才能自动调整到适合连接的流 . 但是,由于大多数视频都很短,所以每次播放的大部分都是极低的质量,即使在快速连接上也无法用户流式传输更高质量的视频 .

我已经确定这是因为iOS会自动将m3u8文件中列出的第一个流作为其初始质量 . Azure Media Services动态打包将最低比特率流放在m3u8列表中的第一位 . 因此,设备始终开始播放最低质量的流 . 在我们的用例中,这可能会有问题 .

我想采取的解决方案是在客户端提供一些关于猜测所需初始速度的智能(如果不是最高质量,设备上的设备可以从更高的质量开始,单元上的设备可以从更低或更低的速度开始,我们可以监控和调整基于最后检测到的速度/质量的初始比特率 .

To accomplish that, I need a way to adjust the initial stream in the m3u8 file produced by Azure Media Services dynamic packaging, on a per-request basis. Apple建议拥有多个主文件,但这并不是得到我需要的东西,但是缺少一些关键细节 .

我很好奇,如果有可能,我只是错过它,或者如果它是一个限制,我将不得不找到另一个解决方案?我可以回到静态包装(更新所有现有内容会很痛苦),但除了繁琐的转换之外,它显然已被弃用,很快就会关闭,所以这甚至可能不是一个真正的选择 .

想法或想法?

谢谢!

(更新2016-01-20以增加清晰度):基本上,这是我的一个视频的HLS动态打包的m3u8文件结果示例:

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="AAC_und_ch2_96kbps",URI="QualityLevels(93571)/Manifest(AAC_und_ch2_96kbps,format=m3u8-aapl)"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="AAC_und_ch2_56kbps",DEFAULT=YES,URI="QualityLevels(53646)/Manifest(AAC_und_ch2_56kbps,format=m3u8-aapl)"
#EXT-X-STREAM-INF:BANDWIDTH=508030,RESOLUTION=240x180,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="audio"
QualityLevels(387555)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=508030,RESOLUTION=240x180,CODECS="avc1.4d400d",URI="QualityLevels(387555)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=762407,RESOLUTION=480x360,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="audio"
QualityLevels(636456)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=762407,RESOLUTION=480x360,CODECS="avc1.4d4015",URI="QualityLevels(636456)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1104186,RESOLUTION=480x360,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(970878)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1104186,RESOLUTION=480x360,CODECS="avc1.4d401e",URI="QualityLevels(970878)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1603625,RESOLUTION=720x540,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(1459566)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1603625,RESOLUTION=720x540,CODECS="avc1.4d401e",URI="QualityLevels(1459566)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=2316919,RESOLUTION=720x540,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(2157505)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2316919,RESOLUTION=720x540,CODECS="avc1.4d401e",URI="QualityLevels(2157505)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=3444678,RESOLUTION=960x720,CODECS="avc1.4d4020,mp4a.40.2",AUDIO="audio"
QualityLevels(3260988)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3444678,RESOLUTION=960x720,CODECS="avc1.4d4020",URI="QualityLevels(3260988)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=62986,CODECS="mp4a.40.2",AUDIO="audio"
QualityLevels(53646)/Manifest(AAC_und_ch2_56kbps,format=m3u8-aapl)

我想将其中一个中等质量的流移到该列表的顶部(PER请求..即,单元上的设备应使用上面的列表,但无线设备应该使用此列表):

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="AAC_und_ch2_96kbps",URI="QualityLevels(93571)/Manifest(AAC_und_ch2_96kbps,format=m3u8-aapl)"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="AAC_und_ch2_56kbps",DEFAULT=YES,URI="QualityLevels(53646)/Manifest(AAC_und_ch2_56kbps,format=m3u8-aapl)"
#EXT-X-STREAM-INF:BANDWIDTH=1104186,RESOLUTION=480x360,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(970878)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1104186,RESOLUTION=480x360,CODECS="avc1.4d401e",URI="QualityLevels(970878)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=508030,RESOLUTION=240x180,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="audio"
QualityLevels(387555)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=508030,RESOLUTION=240x180,CODECS="avc1.4d400d",URI="QualityLevels(387555)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=762407,RESOLUTION=480x360,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="audio"
QualityLevels(636456)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=762407,RESOLUTION=480x360,CODECS="avc1.4d4015",URI="QualityLevels(636456)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1603625,RESOLUTION=720x540,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(1459566)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1603625,RESOLUTION=720x540,CODECS="avc1.4d401e",URI="QualityLevels(1459566)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=2316919,RESOLUTION=720x540,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(2157505)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2316919,RESOLUTION=720x540,CODECS="avc1.4d401e",URI="QualityLevels(2157505)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=3444678,RESOLUTION=960x720,CODECS="avc1.4d4020,mp4a.40.2",AUDIO="audio"
QualityLevels(3260988)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3444678,RESOLUTION=960x720,CODECS="avc1.4d4020",URI="QualityLevels(3260988)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=62986,CODECS="mp4a.40.2",AUDIO="audio"
QualityLevels(53646)/Manifest(AAC_und_ch2_56kbps,format=m3u8-aapl)

注意这些基本上是SAME列表,除了在第二个列表中,列出的第一个STREAM是1104186比特率,其中在第二个,它是更高的508030比特率,iOS假设是初始质量(它将升级或从...降级 . 这样,短的6秒视频在高速连接上的质量不会太差......理想情况下,设备可以记录它最后能够达到的比特率并请求更高的初始值(但仍然在m3u8中有完整列表)所以它可能会根据需要降级)

1 回答

相关问题