Trong phần này, chúng ta sẽ tìm hiểu hai chiến lược mã hoá nội dung nghe nhìn và một số ví dụ thực tế về cách sử dụng các chiến lược đó với FFmpeg và Trình đóng gói Shaka. Hai chiến lược mã hoá mà chúng ta sẽ thảo luận là Clear Key và sử dụng một dịch vụ như Google Widevine. Cả hai chiến lược này đều là một hình thức quản lý quyền kỹ thuật số (DRM) để kiểm soát những việc người dùng có thể làm với nội dung nghe nhìn của bạn. Tuy nhiên, một phương thức vốn kém an toàn hơn phương thức còn lại do cách truyền khoá để xác thực. Đó là lý do tại sao dịch vụ DRM có thể phù hợp hơn.
Các dịch vụ DRM chính cho web là Google Widevine, Microsoft PlayReady và Apple FairPlay, nhưng chúng ta sẽ không đề cập đến tất cả các dịch vụ này trong bài viết này. Tuy nhiên, nếu đang nhắm đến tất cả trình duyệt hiện đại, thì bạn có thể sẽ sử dụng cả ba dịch vụ DRM.
Quá trình chuyển đổi và mã hoá được thực hiện bằng các ứng dụng sau:
Mã hoá khoá rõ
Trước tiên, bạn cần hiểu rõ về Clear Key và những gì không phải là Clear Key trước khi sử dụng. Khi không muốn sử dụng dịch vụ DRM hiện có và cảm thấy việc mã hoá cơ bản nội dung nghe nhìn là một lựa chọn khả thi, bạn sẽ sử dụng Clear Key. Tuy nhiên, hãy lưu ý rằng loại mã hoá này không cung cấp mức độ bảo mật tương tự như khi sử dụng một trong các dịch vụ DRM. Lý do là cặp khoá-giá trị không được mã hoá theo một khoá khác, không giống như các khoá đã mã hoá được tạo bằng khoá giải mã được lưu trữ trên máy chủ cấp phép. Ngoài ra, Clear Key gửi cặp khoá-giá trị dưới dạng văn bản thuần tuý, vì vậy, trong khi bạn đang mã hoá nội dung nghe nhìn, khoá để giải mã nội dung đó không phải là khoá bí mật.
Tạo khoá
Bạn có thể sử dụng cùng một phương thức để tạo khoá cho cả DASH và HLS. Thực hiện việc này bằng cách sử dụng OpenSSL. Mã sau đây sẽ tạo một khoá mã hoá gồm 16 giá trị thập lục phân.
openssl rand -hex 16 > media.key
Tạo IV
Tiếp theo, chúng ta có thể tạo một vectơ khởi tạo (IV).
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
Mã hoá bằng khoá rõ
Ví dụ sau đây sử dụng Trình đóng gói Shaka với khoá thô, trong đó keys
và key_ids
được cung cấp trực tiếp cho Trình đóng gói Shaka. Hãy đọc tài liệu để biết thêm ví dụ.
Đối với cờ key
, hãy sử dụng khoá đã tạo trước đó, được lưu trữ trong tệp media.key
. Tuy nhiên, khi nhập vào dòng lệnh, hãy nhớ xoá khoảng trắng. Đối với cờ key_id
, hãy lặp lại giá trị media.id
hoặc sử dụng giá trị IV được tạo ở trên.
packager \
input=glocken.mp4,stream=audio,output=glockena.m4a \
input=glocken.mp4,stream=video,output=glockenv.mp4 \
--enable_fixed_key_encryption \
--keys label=audio:key=INSERT_AUDIO_KEY_HERE:key_id=INSERT_AUDIO_KEY_ID_HERE,label=video:key=INSERT_VIDEO_KEY_HERE:key_id=INSERT_VIDEO_KEY_ID_HERE
Tạo tệp thông tin khoá
Để mã hoá cho HLS, bạn cần có một tệp thông tin khoá ngoài tệp khoá. Tệp thông tin khoá là tệp văn bản có định dạng dưới đây. Tệp này phải có phần mở rộng .keyinfo
. Ví dụ: encrypt.keyinfo
.
key URI
key file path
private key
URI khoá là nơi media.key
(đã tạo ở trên sẽ nằm trên máy chủ của bạn. Đường dẫn tệp khoá là vị trí của tệp khoá so với tệp thông tin khoá. Cuối cùng, khoá riêng tư là nội dung của chính tệp media.key
hoặc IV mà bạn đã tạo trước đó. Ví dụ:
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
Mã hoá cho HLS
packager \
'input=input.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=input.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8" \
--hls_base_url="http://localhost:5000/"
Lệnh này sẽ chấp nhận khoá có 16 hoặc 32 ký tự.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Mã hoá Widevine
Giờ đây, bạn đã biết mã hoá Clear Key là gì và thời điểm nên sử dụng mã hoá này. Tuy nhiên, khi nào bạn nên sử dụng dịch vụ DRM để tăng cường bảo mật? Đây là nơi Widevine hoặc một dịch vụ khác sẽ được dùng để mã hoá và giải mã nội dung nghe nhìn của bạn một cách an toàn. Widevine hỗ trợ MPEG-DASH và HLS, đồng thời là một DRM của Google. Widevine được các trình duyệt web Google Chrome và Firefox, Android MediaDRM, Android TV và các thiết bị điện tử tiêu dùng khác sử dụng. Các thiết bị này sử dụng Tiện ích nội dung đa phương tiện đã mã hoá và Tiện ích nguồn nội dung đa phương tiện, trong đó Widevine giải mã nội dung.
Mã hoá bằng Widevine
Hầu hết các ví dụ trong bài viết này đều sử dụng phương thức mã hoá Khoá rõ. Tuy nhiên, đối với Widevine, bạn nên thay thế các tuỳ chọn sau.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Bạn phải sao chép chính xác mọi thứ trong lệnh bộ giải mã (demux) ngoại trừ tên tệp và cờ --content-id
từ ví dụ. --content-id
là 16 hoặc 32 chữ số thập lục phân ngẫu nhiên. Sử dụng các khoá được cung cấp tại đây thay vì khoá của riêng bạn. Hãy đọc tài liệu về Trình đóng gói Shaka về cách sử dụng Máy chủ khoá Widevine để biết thêm ví dụ.
Tách (phân tách) âm thanh và video, mã hoá các tệp mới và xuất tệp mô tả bản trình bày nội dung nghe nhìn (MPD).
packager \ input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \ input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \ --enable_widevine_encryption \ --key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \ --content_id "fd385d9f9a14bb09" \ --signer "widevine_test" \ --aes_signing_key "1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9" \ --aes_signing_iv "d58ce954203b7c9a9a9d467f59839249"
Kết hợp (kết hợp) luồng âm thanh và video. Nếu đang sử dụng khung video, bạn có thể không cần làm việc này.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
Trình tự chuyển đổi nội dung nghe nhìn
Phần này trình bày theo thứ tự các lệnh cần thiết để chuyển từ tệp .mov
thô sang các thành phần đã mã hoá được đóng gói cho DASH hoặc HLS. Để có một mục tiêu minh hoạ, chúng ta sẽ chuyển đổi một tệp nguồn thành tốc độ bit 8 Mb/giây ở độ phân giải 1080p (1920 x 1080). Điều chỉnh các giá trị này theo nhu cầu của bạn.
DASH/WebM
Chuyển đổi loại tệp và bộ mã hoá và giải mã.
Đối với lệnh này, bạn có thể sử dụng
liborbis
hoặclibopus
cho bộ mã hoá và giải mã âm thanh.ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
Tạo khoá mã hoá khoá rõ.
openssl rand -hex 16 > media.key
Tách (phân tách) âm thanh và video, mã hoá các tệp mới và xuất tệp mô tả bản trình bày nội dung nghe nhìn (MPD).
packager \ input=tmp_glocken.webm,stream=video,output=glocken_video.webm \ input=tmp_glocken.webm,stream=audio,output=glocken_audio.webm \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \ --mpd_output glocken_webm_vod.mpd
Kết hợp (kết hợp) luồng âm thanh và video. Nếu đang sử dụng khung video, bạn có thể không cần làm việc này.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
Chuyển đổi loại tệp, bộ mã hoá và giải mã video cũng như tốc độ bit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
Tạo khoá mã hoá khoá rõ.
openssl rand -hex 16 > media.key
Tách (phân tách) âm thanh và video, mã hoá các tệp mới và xuất tệp mô tả bản trình bày nội dung nghe nhìn (MPD).
packager \ input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \ input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \ --mpd_output glocken_mp4_vod.mpd
Kết hợp (kết hợp) luồng âm thanh và video. Nếu đang sử dụng khung video, bạn có thể không cần làm việc này.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS chỉ hỗ trợ MP4, vì vậy, trước tiên, bạn cần chuyển đổi sang vùng chứa MP4 và các bộ mã hoá và giải mã được hỗ trợ.
Chuyển đổi loại tệp, bộ mã hoá và giải mã video cũng như tốc độ bit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
Tạo khoá mã hoá khoá rõ.
openssl rand -hex 16 > media.key
Tạo tệp thông tin khoá
packager \ 'input=glocken.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \ 'input=glocken.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ --hls_master_playlist_output="master_playlist.m3u8" \ --hls_base_url="http://localhost:5000/" \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Có rất nhiều thông tin cần phải xử lý, nhưng hy vọng giờ đây bạn đã có thể tự tin mã hoá nội dung nghe nhìn của mình. Tiếp theo, chúng tôi sẽ hướng dẫn bạn cách thêm nội dung nghe nhìn vào trang web.