我在使用 openssl 加密 HLS 时遇到问题。如下所述:对Apple的HTTP Live Streaming使用openssl加密 我使用以下脚本来加密由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视频播放器上播放它吗?
感谢您的所有回复!
草案规范声明 URI 值是带引号的字符串。请参阅规范草案的第 3.4.4 节。