github地址:https://github.com/google/shaka-packager
演示的操作系统:Ubuntu 16.04(图形界面版)
由于是简单演示,所以我们先下载 releases 版的,点击进入。
可以看到,目前最新版本是 2.4.2,我们找到 Linux 平台的工具,点击下载。把它放到一个文件夹中,以便以之后使用。
一般为了适应网络的传输情况,会把片源转化为不同分辨率的视频文件。这里我们使用FFmpeg去做。随便找一个mp4视频文件,执行以下命令,分别生成360p、480p、720p和1080p的分辨率视频。(视频文件下面有链接)
360p
ffmpeg -i src.mp4 -c:a copy \
-vf "scale=-2:360" \
-c:v libx264 -profile:v baseline -level:v 3.0 \
-x264-params scenecut=0:open_gop=0:min-keyint=72:keyint=72 \
-minrate 600k -maxrate 600k -bufsize 600k -b:v 600k \
-y h264_baseline_360p_600.mp4
480p
ffmpeg -i src.mp4 -c:a copy \
-vf "scale=-2:480" \
-c:v libx264 -profile:v main -level:v 3.1 \
-x264-params scenecut=0:open_gop=0:min-keyint=72:keyint=72 \
-minrate 1000k -maxrate 1000k -bufsize 1000k -b:v 1000k \
-y h264_main_480p_1000.mp4
720p
ffmpeg -i src.mp4 -c:a copy \
-vf "scale=-2:720" \
-c:v libx264 -profile:v main -level:v 4.0 \
-x264-params scenecut=0:open_gop=0:min-keyint=72:keyint=72 \
-minrate 3000k -maxrate 3000k -bufsize 3000k -b:v 3000k \
-y h264_main_720p_3000.mp4
1080p
ffmpeg -i src.mp4 -c:a copy \
-vf "scale=-2:1080" \
-c:v libx264 -profile:v high -level:v 5.0 \
-x264-params scenecut=0:open_gop=0:min-keyint=72:keyint=72 \
-minrate 6000k -maxrate 6000k -bufsize 6000k -b:v 6000k \
-y h264_high_1080p_6000.mp4
把下载好的shaka-packager工具文件 和 生成的视频文件 放进同一个文件夹中。
Shaka Packager支持三种不同类型的密钥提供程序:
在Shaka Packager的说明文档中有提及(建议阅读
):
Shaka Packager documentation
Encryption / decryption options
Shaka Packager supports three different types of key providers:
Raw key: keys are provided in command line
Widevine: fetches keys from Widevine key server
PlayReady: fetches keys from PlayReady key server
为了方便演示,我们使用 Raw key
的方法,在Shaka Packager说明文档的下方有分别介绍三种加密方法的段落,而且给了命令行参数的详细说明。以 Raw key 为例:
按照 文档的说明要求,我们可以知道加密的命令的组成,如下:
DASH 加密,生成MPD文件
./packager-linux \
in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4,drm_label=HD \
in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4,drm_label=HD \
in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4,drm_label=HD \
in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4,drm_label=HD \
--enable_raw_key_encryption \
--keys label=HD:key_id=64786568716c377562356a6277376f73:key=656d34736f62376e6635706767636f33 \
--iv 6f6f7431386736677662656b63363536 \
--pssh 000000317073736800000000EDEF8BA979D64ACEA3C827DCD51D21ED00000011220F7465737420636F6E74656E74206964 \
--mpd_output h264.mpd
参数说明
:
For HD Encryption:
key ID = 0x64786568716c377562356a6277376f73
key Value = 0x656d34736f62376e6635706767636f33
key IV = 0x6f6f7431386736677662656b63363536
加密之后,文件夹里会生成5个新的文件,4个加密视频文件呢和1个mpd文件。
把上面加密后的视频文件和shaka-packager工具文件一起移动到另外一个文件夹中,执行解密命令:
./packager-linux \
in=h264_360p.mp4,stream=video,output=h264_baseline_360p_600.mp4,drm_label=HD \
in=h264_480p.mp4,stream=video,output=h264_main_480p_1000.mp4,drm_label=HD \
in=h264_720p.mp4,stream=video,output=h264_main_720p_3000.mp4,drm_label=HD \
in=h264_1080p.mp4,stream=video,output=h264_high_1080p_6000.mp4,drm_label=HD \
--enable_raw_key_decryption \
--keys label=HD:key_id=64786568716c377562356a6277376f73:key=656d34736f62376e6635706767636f33
参数也和加密一个逻辑,就不再细说了。解密之后,会出现解密后的4个文件,可以使用ffplay播放看看:
ffplay h264_high_1080p_6000.mp4
加密会生成两级m3u8文件 和 4个加密视频文件,参考上面的说明,逻辑相似,这里不再多说。
-----HLS m3u8
--加密
./packager-linux \
in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4,drm_label=HD \
in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4,drm_label=HD \
in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4,drm_label=HD \
in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4,drm_label=HD \
--enable_raw_key_encryption \
--keys label=HD:key_id=64786568716c377562356a6277376f73:key=656d34736f62376e6635706767636f33 \
--iv 6f6f7431386736677662656b63363536 \
--pssh 000000317073736800000000EDEF8BA979D64ACEA3C827DCD51D21ED00000011220F7465737420636F6E74656E74206964 \
--hls_master_playlist_output h264.m3u8
--解密
./packager-linux \
in=h264_360p.mp4,stream=video,output=h264_baseline_360p_600.mp4,drm_label=HD \
in=h264_480p.mp4,stream=video,output=h264_main_480p_1000.mp4,drm_label=HD \
in=h264_720p.mp4,stream=video,output=h264_main_720p_3000.mp4,drm_label=HD \
in=h264_1080p.mp4,stream=video,output=h264_high_1080p_6000.mp4,drm_label=HD \
--enable_raw_key_decryption \
--keys label=HD:key_id=64786568716c377562356a6277376f73:key=656d34736f62376e6635706767636f33
示例视频资源,我的资源里自取Free!
参考来源
:https://blog.csdn.net/ganqiuye/article/details/103588597