Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Ý tưởng thô:

Đường truyền ra quốc tế rất kém, bắt buộc phải thuê máy chủ tại VN, làm sao có thể stream video dài dưới 15
phút, full HD, bảo mật và tiết kiệm chi phí ở VN?
Yêu cầu quan trọng khác là phải xem được trên smart phone iOS, android, desktop Mac, Windows, Linux.

Công nghệ, ví dụ đã có sẵn:


1- Lập bảng so sánh các site lớn đào tạo đang sử dụng công nghệ gì:
+ Udemy, Coursera, PluralSight, EggHead.io
+ Kyna, Edumall
Bảng nên có: chuẩn nén (H264 hay???), phương pháp streaming mpeg-dash hay HLS?, độ phân giải 720p
hay 1080p?

2- Các phần mềm free, open source


+ Streaming video trên HTTP protocol chỉ cần static web server không cần component đặc biệt.
+ Khâu chuẩn bị stream, cắt khúc dùng ffmpeg -> HLS, MP4BOX -> Dash cần hiểu rõ cấu hình
+ Chọn video player nào? Ưu tiên Video.js hoặc ....?

Các cách hack để tải trộm video là gì?


1- Copy link URL của manifest gửi ra public. Đây là cách tệ hại nhất khiến máy chủ tốn băng thông.
2- Học viên mua khoá học có quyền xem, nhưng dùng phần mềm, hoặc extension để tải manifest + các khúc
sau đó ghép lại?
+ Hãy trả lời HLS hay Dash cái nào khó lấy trộm hơn?

Bản chất cách lấy trộm:


Cách 1: đọc manifest rồi từ nội dung manifest chứa link đến trunk tải về từng trunk một theo thứ tự rồi ghép lại.
Cách này nhanh và tiện nhất vì có thể tải về đồng thời.
Để chống cách 1, mã hoá manifest, giấu key mã hoá bên trong video player zip minified. Thằng nào tinh ý mở
sublime text đọc code cũng sẽ tìm được cái đoạn đặt key thôi.
Có rồi nó lại phải viết một đoạn để giải mã manifest rồi tải, tương đối là nhục. Nếu không nó chuyển sang cách
2.
Bảo mật file manifest như thế nào?
File manifest là từ điển để link đến tất cả những khúc dữ liệu đã được băm. Có manifest là có tất cả.
+ Mã hoá file manifest từ sau công đoạn băm. Đầu vào file manifest nguyên bản.
+ Mã hoá này cần phải giải mã được ở trình xem video. Bắt buộc phải dùng open source video player.
+ Tên các khúc có thể được đổi đi, khiến phần mềm hack không thể tự dò

Cách 2: nếu không đọc được manifest thì play video từ đầu đến cuối, các trunk sẽ lần lượt được tải về. Cứ thế
mà ghép lại thôi.
Cách này người ta lại nghĩ ra cách chộn vào một - hai trunk chân gỗ nhìn có vẻ như thật, video player cũng tải
về nhưng không decode, nếu phần mềm trộm máy móc tải về ghép vào sẽ bị lỗi file mp4 cuối cùng.

Cả cách 1 hay 2 đều phải chỉnh sửa video player. Do đó cần phải có hiểu biết về javascript.
Thực ra chúng ta phải sửa vào videojs contrib hls, phần tải về segment (trunk)
https://github.com/videojs/videojs-contrib-hls/blob/master/src/media-segment-request.js

Long báo cáo


Kính gửi anh Cường.
Em xin gửi anh báo cáo tiến độ thí nghiệm video stream
HLS
- Dùng ffmpeg generate ra được, chơi trên Windows, Android, iOS đều được.
- Shaka không chơi được nhưng Video.js + HLS Contribute thì chơi được được trên cả Windows 10, Android,
IOS

DASH
- Dùng MP4Box tạo được, buộc phải dùng Shaka player để chơi, xem được trên Windows, Android, nhưng
không xem được trên iOS

Video Player
- Shaka chỉ chơi Dash được. HLS lỗi
- Video.js chỉ chơi HLS. Dash contribute báo lỗi, mặc dù đã tạo playlist
Kiểm tra khả năng đánh cắp video
- Em đã lấy được file m3u8 và video dưới dạng mp4 của HLS
- Do Dash em chưa chạy được nên em chưa kiểm tra được
Còn về trang Techmaster.vn, em đã chọc vào và lấy thành công video của bài giảng, hơi mất công
hơn HLS nhưng có thể lấy được.
-------------
Em xin báo cáo tiến độ 2 ngày một lần.
Em cảm ơn!

Cường
ffmpeg -i bunny.avi -s 1920x1080 -c:v libx264 -b:v 1450k -bf 2 \
-g 90 -sc_threshold 0 -c:a aac -strict experimental -b:a 96k -ar 32000 bunny.mp4

ffprobe -show_frames input.bin | Select-String key_frame

mp4box -dash 3000 -rap -profile dashavc264:onDemand fish.mp4#audio fish.mp4#video

Cách làm lấy từ video https://www.youtube.com/watch?v=t8ebB9Pxb2s


ffmpeg -i ../bunny.mp4 -codec copy -vbsf h264_mp4toannexb -f segment -segment_list bunny.m3u8 -
segment_time 10 -segment_format mpeg_ts -segment_list_type m3u8 bunny%04d.ts

MP4Box -dash 1000 -rap -out bunny.mpd -segment-name bunny ../bunny.mp4

Anh đang tìm hiểu để streaming video hệ thống cũ Techmaster từ Node.js sang Golang.

Hiện nay có một sample


https://github.com/nareix/joy4
https://github.com/zencoder/go-dash

Hiện nay anh quên sạch các quy trình encode video và stream video hiện tại. Do đó nếu em có thể gửi lại tài
liệu em đã document và mã nguồn một phần dự án techmaster hiện nay.

Nếu anh nhớ không nhầm Techmaster sử dụng HLS và MPEG-DASH để truyền dữ liệu.
Phần player chúng ta mua bản quyền của FlowPlayer
https://flowplayer.com

Một số đoạn trao đổi anh tìm lại trong email


Huy phát hiện ra Apple HLS dễ dàng bị download bằng IDM (tool phổ thông như đôi đũa của rân chơi Việt
nam). Do đó HLS không thể play trên Desktop, mà phải là mpeg-dash

Chúng ta vẫn quan niệm rằng:

1- mpeg-dash dành cho non mac, ios


2- còn HLS cho thiết bị ios, mac

Giờ anh mới phát hiện ra có thư viện HLS.js có thể xem video HLS
https://github.com/dailymotion/hls.js/tree/master
demo ở đây
http://dailymotion.github.io/hls.js/demo/

Anh đã xem được trên Mac (Chrome, Safari, Coccoc, chống download từ Coccoc), Windows 10 (IE11, FireFox
xem tốt. riêng IE11 xem native)

Xem được trên thiết bị Android và Tablet.

So sánh chuẩn mpeg-dash vs HLS


http://www.streaminglearningcenter.com/blogs/dash-or-hls-which-is-the-best-format-today.html

http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Life-After-Flash-Will-Producers-Move-to-
HLS-DASH-or-Both-108522.aspx

Có thằng bày cách download HLS


https://www.youtube.com/watch?v=3AvHB82zvZQ

Trường hợp nếu HLS chạy tốt trên mọi thiết bị. Dùng hls.js tích hợp trong flowplayer anh nghĩ đỡ phải
dùng mpeg-dash.

Tiết kiệm được 1/2 dung lượng ổ cứng. Mai thử dùng Flow player HLS
https://github.com/flowplayer/flowplayer-hlsjs

Techmaster dùng Mpeg-Dash để stream video theo từng trunk. Để tiết kiệm dung lượng ổ đĩa, Techmaster chỉ
dùng 1 loại bitrate cho 720p.

Với iOS, MacOS Safari dùng HLS.

Video được xuất ra dạng mp4 chưa nén.


Dùng ffmpeg nén ra định dạng H264
Sau đó dùng MP4Box để chặt file mp4 to thành nhiều khúc nhỏ để streaming theo chuẩn MPEG-Dash

Xem trước video này đã


https://www.youtube.com/watch?v=Fm3Bagcf9Oo
https://www.youtube.com/watch?v=Q6iXH4obXKY

Sau đó đến 2 tutorial này


http://halcyon.ch/dash-tutorial-1-getting-started-with-dash/

http://halcyon.ch/dash-tutorial-2-display-dash-stream/

Google tạo ra Shaka Player để chơi cả HLS và Dash thì quá tốt
https://github.com/google/shaka-player
http://g.co/shakainfo

Long báo cáo


Em xin gửi anh báo cáo tiến độ dự án
Video streaming
Hiện chúng ta đã generate và streaming video HLS cũng như DASH được trên một
số OS như window, linux, iOS, Android ở mức độ cơ bản.
Có thể streaming trên Google Drive được trên những video ở chế độ public.
Tính bảo mật video
Có thể lấy các video streaming ở mức độ bảo mật thấp và trung bình bằng cách truy cập file Manifest để lấy
thông tin, tải các phân đoạn video dưới dạng file M4S hoặc TS, sau đó dùng ffmpeg để nối
và streaming lên server.
Đề xuất
Biện pháp Encrypted HLS khá phổ biến là dùng thuật toán AES, trong đó thể sử dụng các URI , key trong
tệp manifest hoặc giấu đi URI ở mức độ an toàn cao hơn. Một cách khác là sử dụng các token ủy quyền (như
anh đã đề xuất) trong mỗi phiên làm việc nhất định để ủy quyền user. Ngoài ra còn có thể sử
dụng DRM Encrypted.
To Do
- Tiếp tục tìm hiểu streaming và encrypted HLS.
- Sau một tuần làm việc với anh, nghe anh triển khai dự án, cũng như đọc tài liệu. Em thấy còn rất nhiều nội
dung em chưa biết, nhiều nội dung sử dụng khá thụ động dựa theo pattern trên mạng. Mọi thứ còn rất mới. Em
xin phép dành thời gian để tìm hiểu song song với thực hiện dự án, cũng như mong anh chỉ dẫn thêm, hy vọng
không ảnh hưởng đến tiến độ dự án.

Dear anh Cường + Long.

Hiện em sẽ dạy bên samsung 3 buổi nên cuối tuần mới về tech kiểm tra được.
Về cơ bản thì quy trình hoạt động của video server là:
- gv upload video mp4 đã convert h264.
- server convert video từ mp4 sang hls và mpegdash (sử dụng ffmpeg và mp4box)
- mpegdash stream cho pc + android, hls cho ios.

Source code thì trên gitlab.dev và gitlab.com, anh vào check thử xem.

You might also like