Vấn đề nan giải
Nhà sản xuất nội dung mất rất nhiều công sức để làm video nhưng chúng lại dễ dàng bị tải xuống và đánh cắp bằng việc tải với IDM hoặc Cốc Cốc...
Các website học online, các trang phim bị download nội dung và chia sẻ lậu tràn lan làm ảnh hưởng doanh thu doanh nghiệp
Và cả ngàn lý lo khác...
Hướng giải quyết vấn đề
Giải pháp dưới đây sẽ chia nhỏ nội dung video của bạn ra thành nhiều phần gọi là các segments cho định dạng hls có đuôi .m3u8, mỗi video và các segments sẽ được mã hóa bằng các key riêng biệt
Phạm vi ngăn chặn
Chặn download video bằng IDM
Chặn download video bằng Cốc Cốc
Chặn download video bằng các extentions của Chrome
Chặn download video bằng các công cụ tải phổ biến khác
Vấn đề quay màn hình
Tuy nhiên, quay màn hình cũng có nhiều cái khó, ví dụ như:
Tốn thời gian phát video để quay trực tiếp.
Mất nhiều thời gian edit và render lại
Chất lượng video, âm thanh sau đó cũng cực kỳ kém.
Đặc biệt khi bạn gắn thêm watermark hoặc hiển thị vài popup quảng cáo trong nội dung thì editor cũng phải đổ thêm khá nhiều mồ hôi hột
Ăn trộm nội dung bởi Hacker
Tuy nhiên điều chúng ta có thể làm là làm cho quá trình này diễn ra khó khăn và tốn kém hơn, từ đó hacker phải bỏ nhiều công sức hơn và dễ nản lòng hơn trong việc ăn trộm nội dung. Khi mà kết quả thu được không đáng so với công sức bỏ ra thì chắc chắn không ai muốn làm cả
Demo - chạy thử nghiệm
Hãy thử tải video mang đầy tính nhân văn dưới đây bằng IDM, Cốc Cốc, các extentions hay tất cả các công cụ mà bạn có trên máy tính của mình
fb.com/trung.uet
Hướng dẫn thực hiện
Hiện nay có rất nhiều phương pháp bảo vệ nội dung video từ các nhà cung cấp lớn, nhưng ở đây tôi lựa chọn một giải pháp đơn giản, nguồn mở miễn phí
Giải pháp dưới đây áp dụng với video lưu trữ trên máy chủ riêng của bạn (VPS, Dedicated Server...) có chạy các hệ điều hành họ linux, ví dụ ở đây tôi sử dụng trên CentOS 7.
Chống download với ffmpeg

ffmpeg là một thư viện hàng đầu về đa phương tiện (xử lý audio, video), ffmpeg là mã nguồn mở và hoàn toàn miễn phí
Trong bài đăng này, chúng ta sẽ xem xét những gì HLS mã hóa hỗ trợ và cách mã hóa video của bạn bằng ffmpeg.
Mã hóa là quá trình mã hóa thông tin theo cách mà chỉ các bên được ủy quyền mới có thể đọc được. Quá trình mã hóa yêu cầu một khóa bí mật (key) cùng với thuật toán mã hóa.
Có nhiều thuật toán mã hóa khác nhau nhưng HLS chỉ hỗ trợ AES-128. Tiêu chuẩn mã hóa nâng cao (AES) là một ví dụ về mật mã chuỗi khối, mã hóa dữ liệu (và giải mã) dữ liệu trong các khối có kích thước cố định. Nó có một thuật toán khóa đối xứng, có nghĩa là khóa được sử dụng để mã hóa dữ liệu cũng được sử dụng để giải mã nó. AES-128 sử dụng độ dài khóa là 128 bit (16 byte).
HLS sử dụng AES trong chế độ chuỗi khối mật mã (CBC). Điều này có nghĩa là mỗi khối được mã hóa bằng văn bản mật mã của khối trước
Trước khi chúng ta có thể mã hóa video của mình, chúng ta cần một key mã hóa. Tôi sẽ sử dụng OpenSSL để tạo khóa bằng lệnh sau:
$ openssl rand 16 > enc.key
Điều này hướng dẫn OpenSSL tạo ra một giá trị 16 byte ngẫu nhiên, tương ứng với độ dài khóa (128 bit).
Bước tiếp theo là tạo IV. Bước này là tùy chọn. (Nếu không có giá trị nào được cung cấp, số thứ tự phân đoạn sẽ được sử dụng thay thế.)
$ openssl rand -hex 16
ecd0d06eaf884d8226c33928e87efa33 <- kết quả
Hãy lưu lại kết quả này, vì bạn sẽ cần nó ngay
Để mã hóa video, chúng ta cần cho ffmpeg biết cần sử dụng khóa mã hóa nào, đường dẫn URL của khóa, v.v. Chúng tôi thực hiện điều này với tùy chọn -hls_key_info_file chuyển qua vị trí của tệp thông tin chính. Các tập tin phải có định dạng sau:
Tạo file enc.keyinfo bằng vim với lệnh
vim enc.keyinfo
Cấu trúc file enc.keyinfo
Đường dẫn domain tới file key
Đường dẫn hệ thống tới key file
Mã IV (optional)
Đây là ví dụ file enc.keyinfo trên máy chủ của tôi
https://video.codego.vn/enc.key
enc.key
ecd0d06eaf884d8226c33928e87efa33 (optional)
Lệnh render (kết xuất) video ra định dạng hls .m3u8
ffmpeg -y \
-i sample.mov \
-hls_time 9 \
-hls_key_info_file enc.keyinfo
-hls_playlist_type vod \
-hls_segment_filename "fileSequence%d.ts" \
prog_index.m3u8
Ví dụ trên server của tôi
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -hls_time 10 -hls_key_info_file enc.keyinfo ketqua/index.m3u8
ở đây tôi sử dụng việc mã hóa kết hợp nén video xuống chuẩn h264
Khi mở xem danh sách phát được tạo (prog_index.m3u8). Nó sẽ trông giống như thế này:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="https://video.codego.vn/enc.key",IV=0xecd0d06eaf884d8226c33928e87efa33
#EXTINF:8.33333
fileSequence0.ts
#EXTINF:8.33333
fileSequence1.ts
#EXTINF:8.33333
fileSequence2.ts
#EXTINF:8.33333
fileSequence3.ts
#EXTINF:8.33333
fileSequence4.ts
#EXTINF:5.66667
fileSequence5.ts
#EXT-X-ENDLIST
Lưu ý đường dẫn URL của khóa mã hóa. Player sẽ lấy khóa từ vị trí này để giải mã các media segments. Để bảo vệ key khỏi những kẻ trộm, nó phải được chạy qua HTTPS. Bạn cũng có thể cần thực hiện một số cơ chế xác thực để hạn chế người có quyền truy cập vào khóa.
Để xác minh rằng các phân đoạn thực sự được mã hóa, hãy thử phát chúng bằng trình phát đa phương tiện online và thử xem các công cụ như IDM, Cốc Cốc... có thể tải chúng về hay không, ở đây tôi sử dụng công cụ online:
Bạn cần dán đường dẫn tới file playlist prog_index.m3u8 của bạn để chạy thử
Kết luận
Mặc dù HLS hỗ trợ mã hóa, cung cấp một số loại bảo vệ nội dung, nhưng đó không phải là một giải pháp DRM đầy đủ. Nếu điều này làm bạn quan tâm thì bạn có thể muốn xem qua giải pháp Apple FairPlay Streaming.