ffmpeg-简单AES加解密记录
分享一下視頻分段緩存技術之中的一種格式m3u8.據說是蘋果開發的,前途無量。
使用起來確實蠻方便,可以自己集成做成播放器。本文暫時只記錄簡單的加解密和播放。
觀摩這項技術時參考的幾篇文章分享如下:
使用ffmpeg轉碼m3u8并播放:?https://blog.csdn.net/psh18513234633/article/details/79312607
hls協議(最清晰的講解):https://blog.csdn.net/weiyuefei/article/details/70257616
流媒體開發之--HLS--M3U8解析(2): HLS草案:https://blog.csdn.net/newarow/article/details/82805672
ffmpeg Cheatsheet: ??https://gist.github.com/larvata/95df619df7109d8b74d2b965a3266354#file-ffmpeg-cheatsheet-md
使用ffmpeg視頻切片并加密:https://www.cnblogs.com/codeAB/p/9184266.html
ffmpeg分解視頻文件并加密:https://blog.csdn.net/cnhome/article/details/73250495
FFmpeg之ffplay命令使用:https://blog.csdn.net/xuyankuanrong/article/details/77529468
還有一些cmd操作:
CMD批處理循環,太強大了:https://blog.csdn.net/xhhjin/article/details/7373524
copy /b 命令無縫合并多個文件:http://www.360doc.com/content/14/0212/22/9849466_352039289.shtml
當然還有其他很多參考過的網頁,但是都很散,有用信息不多,暫不分享那些網頁。
?
這項技術運用在很多瀏覽器上,所以想找東西練手,還是蠻多的(某些想下載但是沒提示下載的視頻,實際上是放在緩存文件夾里面,然后本地load的)。
這里我就簡單分享一下如何自己用ffmepg對一個視頻加密,以及解密該視頻。
目前我接觸到3種情況:
①未加密的視頻,用PotPlayer可以直接打開觀看;
②有AES的key,沒IV(其實就是使用了默認值),部分有兩個m3u8;
③有AES的key和IV,就是下面將要分享的操作。
?
目前要使用的工具,首先必須要有ffmepg,下載成已經Build好的包,不然自己來生成比較麻煩,當然,有興趣可以下載代碼來看,是開源的。
生成key部分我使用了Openssl,功能超級多,但是本文只用到簡單的生成隨機密碼。好像是我下載不對,操作發現不支持hex,所以后面生成hex部分得寫一下代碼處理,當然也有網頁生成,數據庫生成,這里就不寫明了。
然后就是準備一個視頻。我這次下載了這些東西:
接下來就開始動手:(實際不用Openssl也行,直接手動寫幾個編碼當密碼就行)
????????通過上面推薦的鏈接,大家應該知道是主要m3u8文件,然后附帶的ts文件(可以不寫后綴,就是些視頻片段,可以在播放器中打開觀看),key(會改變視頻片段的編碼,導致無法播放)。
????????這里的m3u8可以用播放器打開,正常是會報錯的,因為視頻片段被AES加密了編碼模式,所以普通讀取出來不是正常的頭,就報錯了。
???????如果你遇到的m3u8沒有加密,那這里是打開可以播放的。上面那些ts也是可以直接播放器打開的。
??????一般情況下,m3u8文件可能需要進行修改。就是當你操作的是手機端,把緩存搞在電腦上轉碼時(或者從C盤緩存目錄拷貝出來時),里面的路徑是不對的,里面記錄的是絕對路徑,需要修改。像下面圖片,手機拷過來后是手機上的絕對路徑,用記事本ctrl + H,該成電腦上的當前路徑后就能用了(或者刪掉變成相對路徑)。
??????現在從頭開始做吧。
??????目前我們手上只有一個test.mp4,先介紹不加密的方式分段生成m3u8:
一.無加密方式生成m3u8
??????新建一個文件夾來放置后面要生成的ts文件。
??????先用管理員身份運行cmd:
??????cd到ffmpeg.exe所在的地方(不過我推薦是cd到要生成文件的地方,然后ffmpeg.exe弄成全路徑來執行,效率會高一些)。
?????例如我test.mp4在D:\aa\bb目錄下:
???這樣我在cmd中輸入:
ffmpeg.exe -y -i D:\aa\bb\test.mp4 -hls_time 6 -hls_playlist_type vod -hls_segment_filename "D:\aa\bb\file%d" D:\aa\bb\playlist.m3u8
???????-hls_time ?是每一段視頻多長時間
???????-hls_segment_filename ??分段生成在哪里,命名規則%d
??????以及結尾的m3u8輸出路徑
??????目錄下已經生成分段文件+m3u8文件了,由于這里沒有加密,所以分段文件可以用播放器直接打開。當然也可以直接打開m3u8文件。
這里插播一下ffplay的使用:
??????指令中要注意的就是路徑,從前面我們知道是m3u8中記錄是用相對路徑,所以需要把cmd移到該目錄下,然后用ffplay的全路徑 +?-allowed_extensions ALL (就是允許全部后綴模式,否則沒后綴的不讓播放) +m3u8 + 回車
D:\aa\ffmpeg-4.0.2-win64-static\bin\ffplay.exe -allowed_extensions ALL playlist.m3u8
????????
???????既然提到分段,那就有合并了。
??????由于這里沒有使用加密,所以可以直接把全部ts文件合并成一個文件就行。
??????可以cmd直接合并,但是需要提前處理命名規則,因為cmd按字符比較的,01和1是兩種不同的概念,這里可以寫個循環處理改命名,然后再 ?cmd的copy /b * new.mp4。
??????cmd代碼不好寫。所以推薦還是用ffmpeg。
?????代碼如下:合并并轉碼成mp4格式
D:\aa\ffmpeg-4.0.2-win64-static\bin\ffmpeg.exe -allowed_extensions ALL -i playlist.m3u8 -acodec copy -vcodec copy -f mp4 output.mp4
二.加密方式生成m3u8
??????有了前面那些截圖,這里的操作其實就是多了寫密碼步驟而已,其他大部分一樣,所以這里就不再截圖了。
?????
?????加密,目前我看的是AES。概念那些大家有空去了解一下,這里只分享一下怎么用。
?????具體步驟是:使用ffmpeg視頻切片并加密
????然后里面一些參數,其實在源文件里面已經有了,可以找這些文檔來弄明白設置什么參數:
????這里我多分享一下直接用一個key來加密怎么操作吧。就是手上有一個密碼+一個視頻,弄到最后是一個放密碼的文本文件,然后就是ts+m3u8,沒有IV。
????其實就是前面步驟中,enc.keyinfo中第三行的IV刪掉就行。
???同時步驟一中用openssl生成key的,改成:新建文本文件,寫入密碼后保存,然后刪掉后綴當key。
????其他照舊:
D:\aa\ffmpeg-4.0.2-win64-static\bin\ffmpeg.exe -y -i test.mp4 -hls_time 6 -hls_key_info_file k0.keyinfo -hls_playlist_type vod -hls_segment_filename "file%d" playlist.m3u8
?
???????密碼文件k0,用openssl生成的話,打開是亂碼的,自己寫入的就不會亂碼,使用起來暫時未發現區別:
???????
???????加密方式生成的ts文件,你會發現無法用播放器打開,只能用ffplay打開(打開方式同無加密一樣的代碼,都是直接傳入m3u8文件即可)。
???????這樣解密方式,實際也和前面一樣,都是圍繞m3u8,是否有key,實際都是內部處理的。
?
??????這里可能會遇到問題的是,網上的都是說EXT-X-KEY這里的是http,實際都可以,找得到文件就行。然后就是開頭提的兩個m3u8的,這個就溜一點:
??????改EXT-X-KEY的文件地址為key的本地地址后,發現這樣去轉是失敗的(提示找不到ts文件),這時可以把下面的一堆ts信息,換成另一個m3u8里面的ts信息,就可以轉換了。我遇到的情況,是第一個ts信息是本地文件,第二個是一個找不到的路徑的文件(但是這個帶key,第一個不帶),修改成本地文件后,除了#EXTINF的數字不同外,其他都一樣(文件也能找到了),結果還是報錯,就把那個m3u8的ts信息都復制過來(#EXTINF的數字保持一樣),本個m3u8只保留EXT-X-KEY這里的URI="k0",其他都是用另一個m3u8的,就可以轉換了。
---------------------?
作者:Yao_PC?
來源:CSDN?
原文:https://blog.csdn.net/Yao_2333/article/details/82910560?utm_source=copy?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的ffmpeg-简单AES加解密记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用ffmpeg视频切片并加密
- 下一篇: 简述回源原理和CDN常见多级缓存