در این بخش قصد داریم دو استراتژی مختلف برای رمزگذاری رسانه شما و چند مثال کاربردی در مورد نحوه استفاده از آنها با FFmpeg و Shaka Packager را پوشش دهیم. دو استراتژی برای رمزگذاری که در مورد آن بحث خواهیم کرد عبارتند از Clear Key و استفاده از سرویسی مانند Google Widevine . هر دو استراتژی نوعی مدیریت حقوق دیجیتال ( DRM ) برای کنترل کارهایی هستند که کاربران می توانند با رسانه شما انجام دهند. با این حال، یکی از آنها ذاتاً به دلیل نحوه ارسال کلیدها برای احراز هویت، امنیت کمتری نسبت به دیگری دارد و به همین دلیل است که سرویس DRM ممکن است منطقی تر باشد.
خدمات اولیه DRM برای وب عبارتند از Google Widevine ، Microsoft PlayReady و Apple FairPlay ، اما ما در این مقاله به همه آنها نخواهیم پرداخت. با این حال، اگر تمام مرورگرهای مدرن را هدف قرار می دهید، احتمالاً از هر سه سرویس DRM استفاده خواهید کرد.
تبدیل و رمزگذاری با این برنامه ها انجام می شود:
رمزگذاری کلید را پاک کنید
ابتدا، قبل از استفاده از Clear Key باید درک خوبی از اینکه Clear Key چیست و چیست داشته باشید. هنگامی که نمی خواهید از یک سرویس DRM موجود استفاده کنید و احساس می کنید رمزگذاری اولیه رسانه شما یک گزینه مناسب است، از Clear Key استفاده می کنید. اما، به خاطر داشته باشید که این نوع رمزگذاری همان سطح امنیتی را با استفاده از یکی از خدمات DRM ارائه نمی دهد. این به این دلیل است که جفت مقدار کلید بر خلاف کلیدهای رمزگذاری شده که توسط یک کلید رمزگشایی که در یک سرور مجوز ذخیره می شود، تولید می شود، تحت کلید دیگری رمزگذاری نمی شود. علاوه بر این، Clear Key جفت مقدار کلید را به صورت متن ساده ارسال می کند، بنابراین در حالی که رسانه خود را رمزگذاری می کنید، کلید رمزگشایی آن راز نیست.
یک کلید ایجاد کنید
می توانید از همین روش برای ایجاد یک کلید برای DASH و HLS استفاده کنید. این کار را با استفاده از OpenSSL انجام دهید. موارد زیر یک کلید رمزگذاری از 16 مقدار هگز ایجاد می کند.
openssl rand -hex 16 > media.key
یک IV ایجاد کنید
سپس میتوانیم یک بردار اولیه (IV) تولید کنیم.
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
با Clear Key رمزگذاری کنید
مثال زیر از Shaka Packager با کلیدهای خام استفاده می کند، که در آن keys
و key_ids
مستقیماً در اختیار Shaka Packager قرار می گیرند. برای مثال های بیشتر مستندات را بخوانید.
برای پرچم key
، از کلید ایجاد شده قبلی استفاده کنید که در فایل media.key
ذخیره می شود. با این حال، هنگام وارد کردن آن در خط فرمان، مطمئن شوید که فضای خالی آن را حذف کرده اید. برای پرچم key_id
، مقدار media.id
را تکرار کنید یا از مقدار IV تولید شده در بالا استفاده کنید.
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
یک فایل اطلاعات کلیدی ایجاد کنید
برای رمزگذاری برای HLS، علاوه بر یک فایل کلید، به یک فایل اطلاعات کلیدی نیز نیاز دارید. فایل اطلاعات کلیدی یک فایل متنی با فرمت زیر است. باید پسوند .keyinfo
را داشته باشد. به عنوان مثال: encrypt.keyinfo
.
key URI
key file path
private key
URI کلید جایی است که media.key
( ایجاد شده در بالا در سرور شما قرار خواهد گرفت. مسیر فایل کلیدی موقعیت آن نسبت به فایل اطلاعات کلید است. در نهایت، کلید خصوصی محتویات خود فایل media.key
یا IV که قبلا ایجاد کردید.
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
رمزگذاری برای 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/"
این دستور یک کلید با 16 یا 32 کاراکتر را می پذیرد.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
رمزگذاری Widevine
اکنون می دانید رمزگذاری Clear Key چیست و چه زمانی از آن استفاده کنید. اما چه زمانی باید از سرویس DRM برای امنیت بیشتر استفاده کرد؟ اینجا جایی است که Widevine یا سرویس دیگری برای رمزگذاری و رمزگشایی ایمن رسانه شما استفاده می شود. Widevine از MPEG-DASH و HLS پشتیبانی می کند و یک DRM از Google است. Widevine توسط مرورگرهای وب Google Chrome و Firefox، Android MediaDRM، Android TV و سایر دستگاههای الکترونیکی مصرفی استفاده میشود که از برنامههای افزودنی رسانه رمزگذاریشده و برنامههای افزودنی منبع رسانه استفاده میکنند، جایی که Widevine محتوا را رمزگشایی میکند.
با Widevine رمزگذاری کنید
بیشتر نمونههای این مقاله از رمزگذاری Clear Key استفاده میکردند. با این حال، برای Widevine شما می خواهید گزینه های زیر را جایگزین کنید.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
همه چیز در دستور demultiplexer (demux) به جز نام فایل های شما و پرچم --content-id
باید دقیقاً از مثال کپی شود. --content-id
16 یا 32 رقم هگز تصادفی است. از کلیدهای ارائه شده در اینجا به جای کلیدهای خود استفاده کنید. برای مثالهای بیشتر، مستندات Shaka Packager در مورد استفاده از سرور Widevine Key را بخوانید.
Demux (جدا کردن) صدا و تصویر، رمزگذاری فایل های جدید، و خروجی یک فایل توضیحات ارائه رسانه (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"
Remux (ترکیب) جریان های صوتی و تصویری. اگر از یک چارچوب ویدیویی استفاده می کنید، ممکن است نیازی به انجام این کار نداشته باشید.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
توالی تبدیل رسانه
این بخش به ترتیب دستورات مورد نیاز برای رسیدن از یک فایل .mov
خام به دارایی های رمزگذاری شده بسته بندی شده برای DASH یا HLS را نشان می دهد. برای اینکه هدفی برای نشان دادن داشته باشیم، یک فایل منبع را به نرخ بیت 8 مگابایت با وضوح 1080p (1920 x 1080) تبدیل می کنیم. این مقادیر را همانطور که نیازهای شما دیکته می کند تنظیم کنید.
DASH/WebM
نوع فایل و کدک را تبدیل کنید.
برای این دستور می توانید از
liborbis
یاlibopus
برای کدک صوتی استفاده کنید.ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
یک کلید رمزگذاری Clear Key ایجاد کنید.
openssl rand -hex 16 > media.key
Demux (جدا کردن) صدا و تصویر، رمزگذاری فایل های جدید، و خروجی یک فایل توضیحات ارائه رسانه (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
Remux (ترکیب) جریان های صوتی و تصویری. اگر از یک چارچوب ویدیویی استفاده می کنید، ممکن است نیازی به انجام این کار نداشته باشید.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
نوع فایل، کدک ویدیویی و میزان بیت را تبدیل کنید.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
یک کلید رمزگذاری Clear Key ایجاد کنید.
openssl rand -hex 16 > media.key
Demux (جدا کردن) صدا و تصویر، رمزگذاری فایل های جدید، و خروجی یک فایل توضیحات ارائه رسانه (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
Remux (ترکیب) جریان های صوتی و تصویری. اگر از یک چارچوب ویدیویی استفاده می کنید، ممکن است نیازی به انجام این کار نداشته باشید.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS فقط از MP4 پشتیبانی می کند، بنابراین ابتدا باید به کانتینر MP4 و کدک های پشتیبانی شده تبدیل کنید.
نوع فایل، کدک ویدیویی و میزان بیت را تبدیل کنید.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
یک کلید رمزگذاری Clear Key ایجاد کنید.
openssl rand -hex 16 > media.key
یک فایل اطلاعات کلیدی ایجاد کنید
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
این مطالب برای هضم زیاد بود، اما امیدواریم اکنون بتوانید رسانه های خود را با اطمینان رمزگذاری کنید. در ادامه نحوه افزودن رسانه به سایت خود را به شما نشان خواهیم داد.