用ffmpeg加密並產生HLS串流
AES-128 CBC 加密的HLS串流
1. 產生keyinfo檔案
openssl rand -hex 16 > crypto.key
openssl rand -hex 16 > crypto.key
cat crypto.key | xxd -r -p > crypto.bin
echo "crypto.bin" > mine_key.keyinfo
echo "crypto.bin" >> mine_key.keyinfo
openssl rand -hex 16 >> mine_key.keyinfo
keyinfo檔案內的第1行是解密key檔案位置,第2行是加密key檔案位置,iv值(不是檔案)
$ cat mine_key.keyinfo
crypto.bin
crypto.bin
1e6ae3ae8b573d371bc19525afed405f
2. 產生HLS串流
因為我的ffmpeg是自己編譯的版本,所以呼叫路徑是這樣
/home/mirochiu/test/ffmpeg/ffmpeg -y -i source.ts \
-c copy -map 0 \
-f hls -hls_time 10 -hls_list_size 0 -start_number 1 \
-hls_key_info_file mine_key.keyinfo \
-hls_playlist_type vod \
-hls_segment_filename 'test-%03d.ts' test.m3u8
m3u8內容類似下面這樣
3. 放置到http server並測試播放
把產生出來的眾多ts檔案,m3u8,以及key放上http server,就可以用ffplay播放
ffplay http://localhost:8080/static/hls/test.m3u8
如果要直接播放本機目錄,會被ffmpeg擋住,需要加個allowed_extensions參數
crypto.key' is not a common multimedia extension, blocked for security reasons.
/home/mirochiu/test/ffmpeg/ffplay -allowed_extensions ALL /content/test_hls/test.m3u8
如果要在android上直接播放, 可以用這個測試
adb shell am start -a android.intent.action.VIEW -t 'video/*' -d 'http://localhost:8080/static/hls/test.m3u8'
施作細節參考
https://rockycoder.cn/ffmpeg/2018/10/26/Generate-encrypted-video.html
相關文章:
ffmpeg加密串流檔案及即時播放解密
https://codingnote.blogspot.com/2018/04/ffmpeg.html
用ffmpeg轉成HLS檔案群
https://codingnote.blogspot.com/2017/02/ffmpeghls.html
echo "crypto.bin" > mine_key.keyinfo
echo "crypto.bin" >> mine_key.keyinfo
openssl rand -hex 16 >> mine_key.keyinfo
keyinfo檔案內的第1行是解密key檔案位置,第2行是加密key檔案位置,iv值(不是檔案)
$ cat mine_key.keyinfo
crypto.bin
crypto.bin
1e6ae3ae8b573d371bc19525afed405f
因為我的ffmpeg是自己編譯的版本,所以呼叫路徑是這樣
/home/mirochiu/test/ffmpeg/ffmpeg -y -i source.ts \
-c copy -map 0 \
-f hls -hls_time 10 -hls_list_size 0 -start_number 1 \
-hls_key_info_file mine_key.keyinfo \
-hls_playlist_type vod \
-hls_segment_filename 'test-%03d.ts' test.m3u8
m3u8內容類似下面這樣
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-KEY:METHOD=AES-128,URI="crypto.bin",IV=0x1e6ae3ae8b573d371bc19525afed405f
#EXTINF:9.072711,
test-001.ts
#EXTINF:10.140089,
test-002.ts
#EXTINF:9.606400,
test-003.ts
...
#EXT-X-ENDLIST
3. 放置到http server並測試播放
把產生出來的眾多ts檔案,m3u8,以及key放上http server,就可以用ffplay播放
ffplay http://localhost:8080/static/hls/test.m3u8
如果要直接播放本機目錄,會被ffmpeg擋住,需要加個allowed_extensions參數
crypto.key' is not a common multimedia extension, blocked for security reasons.
/home/mirochiu/test/ffmpeg/ffplay -allowed_extensions ALL /content/test_hls/test.m3u8
如果要在android上直接播放, 可以用這個測試
adb shell am start -a android.intent.action.VIEW -t 'video/*' -d 'http://localhost:8080/static/hls/test.m3u8'
施作細節參考
https://rockycoder.cn/ffmpeg/2018/10/26/Generate-encrypted-video.html
相關文章:
ffmpeg加密串流檔案及即時播放解密
https://codingnote.blogspot.com/2018/04/ffmpeg.html
用ffmpeg轉成HLS檔案群
https://codingnote.blogspot.com/2017/02/ffmpeghls.html
留言