1. 程式人生 > >ffmpeg-簡單AES加解密記錄

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 
版權宣告:本文為博主原創文章,轉載請附上博文連結!