苹果设备无法播放HLS流

5
我有一个实时的RTSP流,通过VLC已经成功地转码成HLS格式。现在,在Android和桌面浏览器(通过flash)上它能够完美地工作。
但是在苹果设备上却不行(我可以在虚拟机中测试它在iPad和桌面版Safari上的表现)。我可以看到播放器,但当我按下“播放”按钮时,播放器内只会出现一个黑色矩形。在桌面版Safari上,还会出现一个“正在加载......”的文本,除此之外就没有其它消息了。
我的HTML如下:
<video id="player" controls style="width:100%; height:100%">
  <source src="http://178.79.164.114/playlist.m3u8" type="application/x-mpegURL">
</video>

vlc的命令:

vlc -I dummy rtsp://<stream-url> --sout '#transcode{width=320,height=240,fps=25,vcodec=h264,vb=256,acodec=none,venc=x264{aud,profile=baseline,level=30,keyint=30,bframes=0,ref=1,nocabac}}:std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=/path/to/server/directory/playlist.m3u8,index-url=http://178.79.164.114/seg-########.ts},mux=ts{use-key-frames},dst=/path/to/server/directory/seg-########.ts}'

以下是播放列表文件的示例:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:179
#EXTINF:9.60,
http://178.79.164.114/seg-00000179.ts
#EXTINF:9.60,
http://178.79.164.114/seg-00000180.ts
#EXTINF:9.60,
http://178.79.164.114/seg-00000181.ts
#EXTINF:9.61,
http://178.79.164.114/seg-00000182.ts
#EXTINF:9.59,
http://178.79.164.114/seg-00000183.ts

以下是 ffprobe http://178.79.164.114/playlist.m3u8 的奇怪输出(为什么会出现 N/A 和 variant_bitrate 值为 0?)。这可能有所帮助:

Input #0, hls,applehttp, from 'http://178.79.164.114/playlist.m3u8':
  Duration: N/A, start: 3995.330722, bitrate: N/A
  Program 0 
    Metadata:
      variant_bitrate : 0
    Stream #0:0: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p, 320x240 [SAR 11:12 DAR 11:9], 25 fps, 25 tbr, 90k tbn, 50 tbc

我还为.m3u8和.ts文件配置了正确的MIME类型,并花了一天时间搜索和尝试不同的转码命令选项:宽度、高度、比特率、帧速率、不同的配置文件和级别... - 无济于事。但是,如果我尝试一些来自苹果的示例(http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8)- 一切都很好,虽然这不是一个实时流。

如果有人有任何想法或有可能使用mediastreamvalidator测试我的流 - 请帮忙。

更新

现在我正在尝试变体播放列表,但没有改变任何东西。


1
当您未使用变体播放列表时,会显示“variant_bitrate:0”。您可以尝试添加一个静音音轨,看看是否有所改善? - aergistal
@aergistal 抱歉,之前没有测试的可能性。现在它可以工作了,谢谢!但是为什么没有音轨就不能工作呢?这是一种已记录的行为吗?另外,您可以创建一个答案,我会接受它。 - devochka-volshebnitsa
这个回答解决了你的问题吗?在iOS/Safari上进行HLS视频流传输 - Amo Wu
1个回答

5
播放器可能希望混合视频和音频,因此请添加一个无声音轨。根据Apple HLS文档的说法:
媒体段文件通常由流片段器生成,基于编码器的输入,并由一系列.ts文件组成,其中包含携带H.264视频AAC、MP3或AC-3音频的MPEG-2传输流的片段。 技术说明TN2224中提到了对仅音频流的支持,协议的第7个修订版引入了对备用版本(非混合流)的支持,但是这是通过主播放列表中的EXT-X-MEDIA标签来控制播放(您的是媒体播放列表)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接