【问题标题】:Native iOS video player fails on HLS encrypted with openssl本机 iOS 视频播放器在使用 openssl 加密的 HLS 上失败
【发布时间】:2013-12-18 10:16:17
【问题描述】:

我在使用 openssl 加密 HLS 时遇到问题。如此处所述:Using openssl encryption for Apple's HTTP Live Streaming 我正在使用以下脚本来加密 ffmpeg 创建的 TS 文件:

encyptionKeyFile="crypt.key"
openssl rand 16 > $encyptionKeyFile
encryptionKey=`cat $encyptionKeyFile | hexdump -e '16/1 "%02x"'`

splitFilePrefix="$fileName.split."
encryptedSplitFilePrefix="${splitFilePrefix}enc."

numberOfTsFiles=`ls ${splitFilePrefix}*.ts | wc -l`

for i in {0..$numberOfTsFiles}; do
    initializationVector=`printf '%032x' $i`
    openssl aes-128-cbc -e -in ${splitFilePrefix}$i.ts -out ${encryptedSplitFilePrefix}$i.ts -nosalt -iv $initializationVector -K $encryptionKey
    rm ${splitFilePrefix}$i.ts
done


用于生成TS文件的ffmpeg命令如下:

ffmpeg -i $file -codec copy -map 0 -f segment -vbsf h264_mp4toannexb -segment_list $mainPlaylistName -segment_time 10 ${splitFilePrefix}%d.ts


M3U8 播放列表文件如下所示:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-KEY:METHOD=AES-128,URI=crypt.key
#EXT-X-TARGETDURATION:19
#EXTINF:11.875000,
BigBuckBunnyMovie.split.enc.0.ts
#EXTINF:11.166667,
BigBuckBunnyMovie.split.enc.1.ts
#EXTINF:12.500000,
BigBuckBunnyMovie.split.enc.2.ts
#EXTINF:12.166667,
BigBuckBunnyMovie.split.enc.3.ts
#EXTINF:8.375000,
...
#EXT-X-ENDLIST


我认为这可能是编码问题或 ffmpeg 命令格式的问题,但问题是加密流在本机 iOS 播放器(MPMoviePlayerController)上不起作用,但在 VLC 上运行良好。更重要的是,未加密的流(使用 ffmpeg 生成的 TS 文件)适用于原生播放器和 VLC!

您能否建议我如何才能在原生 iOS 视频播放器上播放它?

感谢您的所有回复!

【问题讨论】:

  • 你能显示(至少是一个 sn-p)变体 m3u8 文件吗?
  • 好的,我已将其添加到问题中。
  • iOS 播放器是否在请求 crypt.key URI?我不确定它是否会接受这样的相对 URL。
  • 我认为这应该不是问题。无论如何,如果我将其更改为“URI=localhost/crypt.key”如果也失败了。
  • 也许可以尝试使用协议 (http://)

标签: ios video encryption openssl http-live-streaming


【解决方案1】:

规范草案规定 URI 值是带引号的字符串。请参阅草案规范的3.4.4 部分。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2015-07-26
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多