【发布时间】:2022-08-15 23:08:58
【问题描述】:
与other questions I\'ve seen 类似,我发现我无法将我的 HTTPS(以及通过 JWT/服务器端身份验证保护的密码)m3u8 TS 流传输到 AirPlay。这些文件是通过我自己的 API/Web 应用程序使用 HTML 提供的。
我的 HLS 流在我的 iPhone 上可以正常播放(撰写本文时配备最新 iOS 的 iPhone 8),但似乎是 AirPlay 失败了。 Apple 的 example m3u8 HTTP video stream files for TS and MP4 从我的手机到 AirPlay 按预期工作,但我自己的 m3u8 文件没有。
我想答案可能在Apple\'s HTTP Live Streaming (HLS) specification documentation 或他们的WWDC talk on HLS authoring 之内,但我发现参考资料太不透明,一般来说,作为一个不熟悉 HLS 流媒体的人,无法理解。
我已经尝试在video 元素上使用x-webkit-airplay=\"allow\" explicitly opting in to AirPlay 以及将服务器响应Content-Type 从application/x-mpegURL 切换到application/vnd.apple.mpegurl,但没有成功。
我正在使用hls.js 播放视频,并且使用ffmpeg 对视频进行了转码。
ffmpeg -i \"${1}\" \\
-filter_complex \"[0:v]split=1[v1]; [v1]scale=w=1080:h=-1[v1out]\" \\
-map \"[v1out]\" -c:v:2 libx264 -x264-params \"nal-hrd=cbr:force-cfr=1\" -b:v:2 5M -maxrate:v:2 5M -minrate:v:2 5M -bufsize:v:2 10M -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \\
-map \"a:0\" -c:a:0 aac -b:a:0 96k -ac 2 \\
-f hls \\
-hls_time 2 \\
-hls_playlist_type vod \\
-hls_flags independent_segments \\
-hls_segment_type mpegts \\
-hls_segment_filename \"${2}/${3}/data%02d.ts\" \\
-var_stream_map \"v:0,a:0\" \"${2}/${3}/stream.m3u8\"
我的 iPhone似乎显示视频当前正在播放,但 AirPlay 没有显示任何正在播放的迹象。
这是我的m3u8 文件的 sn-p...
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-INDEPENDENT-SEGMENTS
#EXTINF:2.400000,
data00.ts
#EXTINF:1.600000,
data01.ts
#EXTINF:2.400000,
data02.ts
#EXTINF:1.60
...
...与苹果的例子...
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2218327,BANDWIDTH=2227464,CODECS=\"avc1.640020,mp4a.40.2\",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud1\",SUBTITLES=\"sub1\"
v5/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8144656,BANDWIDTH=8178040,CODECS=\"avc1.64002a,mp4a.40.2\",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud1\",SUBTITLES=\"sub1\"
v9/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6307144,BANDWIDTH=6453202,CODECS=\"avc1.64002a,mp4a.40.2\",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud1\",SUBTITLES=\"sub1\"
v8/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4775338,BANDWIDTH=5054232,CODECS=\"avc1.64002a,mp4a.40.2\",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud1\",SUBTITLES=\"sub1\"
v7/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3240596,BANDWIDTH=3289288,CODECS=\"avc1.640020,mp4a.40.2\",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud1\",SUBTITLES=\"sub1\"
v6/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1292926,BANDWIDTH=1296989,CODECS=\"avc1.64001e,mp4a.40.2\",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud1\",SUBTITLES=\"sub1\"
v4/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=914722,BANDWIDTH=922242,CODECS=\"avc1.64001e,mp4a.40.2\",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud1\",SUBTITLES=\"sub1\"
v3/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=541239,BANDWIDTH=553010,CODECS=\"avc1.640015,mp4a.40.2\",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud1\",SUBTITLES=\"sub1\"
v2/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2439704,BANDWIDTH=2448841,CODECS=\"avc1.640020,ac-3\",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud2\",SUBTITLES=\"sub1\"
v5/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8366033,BANDWIDTH=8399417,CODECS=\"avc1.64002a,ac-3\",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS=\"cc1\",AUDIO=\"aud2\",SUBTITLES=\"sub1\"
v9/prog_index.m3u8
...
标签: web http-live-streaming airplay hls.js