我有一个实时RTSP流,我已经设法通过VLC转码到HLS。现在它在Android和桌面浏览器上都很完美(通过闪存)。
但不是Apple(我可以在我的虚拟机上的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类型,并花了一天时间搜索并尝试转码命令的不同选项:宽度,高度,比特率,fps,不同的配置文件和级别...... - 没有任何作用。但是,如果我尝试苹果(http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8)的一些例子 - 一切都很好,虽然它不是直播。
如果有人有任何想法或有可能使用mediastreamvalidator
测试我的信息流 - 请提供帮助。
更新
现在我正在尝试使用变体播放列表,但它什么都没有改变。
答案 0 :(得分:3)
播放器可能需要多路复用的视频和音频,因此请添加无声音轨。
媒体段文件通常由流分段器根据编码器的输入产生,并由一系列.ts文件组成,这些文件包含携带H.264视频和<的MPEG-2传输流段。 / strong> AAC,MP3或AC-3音频
Technical Note TN2224中提到了对纯音频流的支持,协议的第7版修订版引入了对备用节目(未复用流)的支持,但这是通过控制主播放列表的主播放列表中的EXT-X-MEDIA
标签完成的。播放(你的是媒体播放列表)。