首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流HTTPS (和密码保护) m3u8到AirPlay

流HTTPS (和密码保护) m3u8到AirPlay
EN

Stack Overflow用户
提问于 2022-05-08 17:05:31
回答 1查看 484关注 0票数 0

其他我见过的问题类似,我发现我无法将HTTPS (以及通过JWT/服务器端auth保护的密码) m3u8 TS流传输到AirPlay。这些文件是通过我自己的API/web应用程序使用HTML提供的。

My HLS流在我的iPhone (编写时的iPhone 8w/最新的iOS )上播放得很好,但似乎失败的是AirPlay。从我的手机到AirPlay,苹果的AirPlay都能正常工作,但我自己的m3u8文件却没有。

我想答案可能在苹果的HTTP流(HLS)规范文档或他们的WWDC谈HLS创作中,但我发现这些参考资料太不透明了,无法作为一般的HLS流媒体新手跟进。

我尝试过在显式选择AirPlay元素上使用x-webkit-airplay="allow",并将服务器响应Content-Typeapplication/x-mpegURL切换到application/vnd.apple.mpegurl,但没有成功。

我使用hls.js播放视频,视频被转换成这样使用ffmpeg

代码语言:javascript
运行
复制
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文件的片段..。

代码语言:javascript
运行
复制
#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
...

...vs苹果的例子..。

代码语言:javascript
运行
复制
#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
...
EN

回答 1

Stack Overflow用户

发布于 2022-10-03 22:53:21

问题是,当播放视频的设备试图播放它时,它真正要做的是加载master.m3u8播放列表,然后播放视频。由于您的m3u8受到保护,所以设备没有加载它的权限。而主浏览器中的cookie并没有传递给电视设备,因此在现实中,它的工作方式与预期的一样:一个你不认识的人(电视)正在尝试播放视频。

寻找方法只保护主播放列表与签名在url本身,然后有一个中间的软件,创建饼干,以保护其余的片段。

我们把AWS云前端和lambda放在了边缘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72163351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档