【问题标题】:Stream HTTPS (and password protected) m3u8 to AirPlay将 HTTPS(和受密码保护的)m3u8 流式传输到 AirPlay
【发布时间】: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-Typeapplication/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


    【解决方案1】:

    遇到同样的问题,还在研究。似乎 AirPlay 对媒体格式特别敏感 - 该站点指定了 AirPlay 所需的这种编码:

    https://lifehacker.com/how-to-make-all-your-video-airplay-compatible-5696764

    > HD Videos
    > Video Codec: H.264 (Main Profile)
    > Video Bitrate: 5442kbps (anywhere between 5000 and 6000 kbps should be fine)
    > Video Resolution 1280x720 (also known as 720p)
    > Frames Per Second: 30 (or less) Audio
    > Codec: AAC (Low Complexity)
    > Audio Bitrate: 160kbps
    > Audio Samplerate: 48 or 44.1 kHz
    

    我希望能够在没有 ffmpeg 的情况下使用 nginx 和 nginx-rtmp-module 来完成此操作,我发现这可能会落后或消耗太多资源,如果用户可以将这些数据流式传输到 AirPlay 而无需任何转码。 AirPlay 可以用 Macbook 播放相同的内容,但不能从 iPhone/iPad 播放。

    将继续调查它 - 你有没有想出一个解决方案?

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2016-06-25
      相关资源
      最近更新 更多