HLS 流不适用于 Apple 设备

HLS stream not working on Apple devices

我有一个实时 RTSP 流,我已设法通过 VLC 转码为 HLS。现在它在 Android 和桌面浏览器(通过 flash)上完美运行。

但不能在 Apple 上使用(我可以在虚拟机上的 iPad 和桌面 Safari 上进行测试)。我可以看到播放器,但是当我按下 'play' 按钮时,我看到的只是播放器内部的一个黑色矩形。在桌面版 Safari 上,play/pause 按钮附近还有一个文本 'Loading...',没有其他任何反应。

我的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 类型,并花了一天的时间搜索和尝试转码命令的不同选项:宽度、高度、比特率、fps、不同的配置文件和级别... - 没有作品。但是如果我尝试一些苹果的例子 (http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8) - 一切都很好,虽然它不是直播。

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

更新

现在我正在试验变体播放列表,但它没有任何改变。

播放器可能希望混合视频和音频,因此添加静音音轨。

Apple HLS documentation 说:

The media segment files are normally produced by the stream segmenter, based on input from the encoder, and consist of a series of .ts files containing segments of an MPEG-2 Transport Stream carrying H.264 video and AAC, MP3, or AC-3 audio

Technical Note TN2224 中提到了对纯音频流的支持,并且协议的第 7 版修订版引入了对替代再现(未混合流)的支持,但这是通过主播放列表中的 EXT-X-MEDIA 标签完成的控制播放(你的是媒体播放列表)。