2013-12-18 127 views
2

我遇到了使用openssl加密HLS的問題。如下所述:Using openssl encryption for Apple's HTTP Live Streaming我使用下面的腳本來加密通過的ffmpeg創建TS文件:用於生成TS文件原生iOS視頻播放器在使用openssl加密的HLS上失敗

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 


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視頻播放器上播放它嗎?

感謝您的回覆!

+0

你可以顯示(至少一個片段)的變種m3u8文件? – vipw

+0

好吧,我添加它的問題。 –

+0

iOS播放器是否請求crypt.key URI?我不確定它會接受這樣的相對URL。 – vipw

回答

0

規範草案指出URI值是帶引號的字符串。請參閱草稿規範的3.4.4部分。

相關問題