stream video mp4 hay hls như mấy trang phim

Discussion in 'Thảo Luận Chung' started by lakazai, Mar 15, 2021.

  1. lakazai

    lakazai Tân Thủ Thôn

    như tiêu đề cho mình hỏi nên stream video mp4 hay hls sẽ ổn áp hơn?. ưu nhược điểm là gì?

    mình dùng ffmpeg để convert video nhưng cảm thấy video load vẫn chậm. (em dùng jwtplayer)
    có cách nào tối ưu cho nó load nhanh hơn không (có thể config nginx hoặc lệnh convert ffmpeg giúp optimize video).

    ngoài ra thông tin thêm là server hetzner đặt ở đức mà view chủ yếu là ở châu á. cũng chưa biết khắc phục sao cho tốc độ nhanh hơn. :(

    mong các pro giúp đỡ
     
    Last edited: Mar 15, 2021
  2. firefox

    firefox Bang Chúng

    Mò hết comment và các topic của bác Cái Bang, sẽ học mót được nhiều thứ, trong đó có thứ bạn hỏi
     
  3. lakazai

    lakazai Tân Thủ Thôn

    đã đọc hết cơ mà vẫn chưa hiểu, chắc mình quá ngu muội :(
     
  4. Định Phong Ba

    Định Phong Ba Khách Qua Đường

    Bạn nên ghi chỗ bạn chưa hiểu ra,mọi người biết có thể sẽ giúp chứ chung chung thế này.Ko ai trả lời đâu
     
  5. EDM

    EDM Sơ Nhập Giang Hồ

    1. Hls sẽ nhanh và ổn áp hơn là 1 file mp4.
    2. Lệnh convert ffmpeg tối ưu thì mình hk rõ, hóng cao nhân. Còn chậm thì hetzer Đức stream Châu Á chậm đúng rồi, bạn nên thuê ở Châu Á hay CDN.
     
  6. Tọi

    Tọi Sơ Nhập Giang Hồ

    nhưng lúc này b phải đầu từ vào server mạnh hơn rất nhiều, vì nó phải convert file mp4 ra .hls chunks, và đòi hỏi CPU phải mạnh, RAM thì ít hơn. chưa kể server bạn phải có băng thông rộng, 1Gbps là ít nhất, chứ 500Mbps stream 1 sự kiện khoảng 150 ng xem là bắt đầu vất vả rồi. huống gì đây là stream nhiều video (trang phim chẳng hạn)

    còn dùng MP4 thì đơn giản hơn, cấu hình NGINX + server có bandwidth rộng là đc.
     
  7. sincos

    sincos Bang Chúng

    Câu hỏi của bạn đáng giá nhiều ngàn đô đấy. Không dễ mà chém gió mà xong dc.
     
  8. Cái bang

    Cái bang Sơ Nhập Giang Hồ

    Hls sẽ giảm IO, giảm băng thông network cho server rất nhiều. mp4 chỉ thuận tiện cho member download dễ hơn thôi.
    Các site lớn như youtube, facebook đều dùng hls.
     
  9. Tọi

    Tọi Sơ Nhập Giang Hồ

    không đúng, streamming thì youtube dùng hls, còn bản chất youtube khi upload file xong, vẫn convert qua file mp4 và serve file .mp4 nhé, bạn inspect element lên là thấy, file upload rồi vẫn serve mp4.
    facebook livestream dùng định dạng DASH for các thiết bị pc/android, ios thì hls.

    và livestream thì tăng băng thông và tăng IO chứ sao giảm được, so2 serve 1 file với việc phải cắt - convert file đó về định dạng hls thì streamming tốn tài nguyên hơn chứ, đặc biệt là CPU.
     
  10. sincos

    sincos Bang Chúng

    Bạn phải tìm hiểu về hành vi của Player khi load video thì mới hiểu ý được bác @Cái bang .

    HLS nó băm video thành nhiều segment ==> Khi player load video thì thường nó chỉ load quá (buffer) 1 đoạn của video - ví dụ đang xem ở 00:05:34 ==> thì nó sẽ buffer tới 00:08:00 và sẽ dừng => connection tới server được giải phóng => IO, BW được giải phóng => tiết kiệm.

    HLS là các file nhỏ ==> rất dễ để cache-control (cache server, cdn server....)

    Thật ra cùng 1 video thì tổng dung lượng của HLS cao hơn single file (mp4, avi....) một chút vì mỗi file phải chứa thêm header. Chi phí convert sang HLS cũng đắt đỏ hơn chút.
     
    Nai and pipapipo like this.
  11. Tọi

    Tọi Sơ Nhập Giang Hồ

    mình cũng đang làm app interactive streamming đây mà.
    chi phí để run HLS chắc chắn là cao hơn nhiều rồi
     
  12. firefox

    firefox Bang Chúng

    phải nói thẳng ý của bác ấy là HLS dùng file nhỏ, dễ cheat thì mới thuyết phục :v
     
  13. sincos

    sincos Bang Chúng

    Thì mọi kỹ thuật đều hướng đến cái đích giá rẻ và UX tốt cho user. Về cơ bản thì video streamming không dành cho những người ít tiền. Nên cheat cũng là cách giảm đi phần nào khoản đầu tư cho mảng này.

    Hetzner chỉ nên là backend => quản lý kho media, backup traffic khi các cheating point bị limit/block/banned mà thôi. Để cải thiện tốc độ thì bạn phải scale nhiều cheating point thôi. Không thì phải bỏ tiền mua CDN xịn để dùng.

    Chấm hết!!!
     
    EDM, firefox and Nai like this.
  14. Cái bang

    Cái bang Sơ Nhập Giang Hồ

    Youtube họ vẫn dùng mp4, nhưng thực chất file mp4 đã được chia nhỏ ra thành các segment giống như hls. b mở trình duyệt và có thể thấy rất nhiều request, mỗi request chỉ load về vài MB, giống hệt như hls.

    Bản chất của dash hay hls, hay mp4 fragment kiểu youtube là đều phải chia nhỏ file video ra và có 1 file index như file .m3u8 . Để giảm tải cho phía server thì điều này là bắt buộc. Chỉ là bạn thích lựa chọn công nghệ nào thôi: HLS hoặc DASH hay fragmented MP4 .

    Trong stream video thì CPU,RAM là thứ luôn luôn dư thừa, IO của disk, network là thứ thiếu nhất và luôn cần tối ưu trước tiên.
    Khi bạn stream file mp4 cho trình duyệt, sẽ gặp phải 2 đối tượng khiến server bị sập :
    + khách hàng có mạng quá nhanh, tưởng tượng 1 khách hàng có cổng mạng 1Gbps, nó load file 1GB hết có 8s, sau đó xem được 10s rồi tắt trình duyệt hoặc chuyển qua video khác. Như thế bạn đã lãng phí 1GB băng thông. Nếu là hls, hoặc dash, khách xem 10s thì trình duyệt chỉ load về trước khoảng 20s video.
    + khách hàng có mạng quá cùi, hoặc mạng chập chờn không ổn đinh, trình duyệt cứ load file hoài, còn ở phía server thì disk phải làm việc liên tục. Chẳng mấy chốc IO của disk sẽ bị nghẽn. Nếu dùng hls, server lần lượt đọc từng fragment rồi cache vào ram, sau đó giải phóng IO cho disk. Nếu dùng file mp4 mà không chia fragment, việc cache từng phần của file vào ram sẽ phức tạp hơn rất nhiều.
     
    Last edited: Mar 17, 2021
    Nai, EDM, Thanh Nguyen and 2 others like this.
  15. hjhjhaha

    hjhjhaha Khách Qua Đường

    Tớ có Sell Tool Drive > Hls đây :D Cân tải 4000 onsite :D Bạn nào cần contact mình nhé :D
     
  16. lakazai

    lakazai Tân Thủ Thôn

    thanks pro góp ý, giờ em có 1 vấn đề cần hỏi về domain
    em có domain chính là domainA.com và domain phụ để trỏ về các server chứa video dạng server{0->10}.domainB.com
    trước em dùng cloudflare để trỏ domainB.com về các server chưa video đó. nhưng policy của cloudflare không cho phép domain chỉ sử dụng cho viện lưu trữ media và bị block.
    hiện tại em đang trỏ trực tiếp domainB về các server con không thông qua cloudflade. như vậy ip của server lưu trữ sẽ bị lộ. vậy có thể bị report mất server lưu trữ (của hetnzer) k ạ
     
  17. firefox

    firefox Bang Chúng

    có bị, tụi reporter giờ gớm lắm
     
  18. lakazai

    lakazai Tân Thủ Thôn

    vậy có cách nào tránh đc không pro :(
     
  19. Cái bang

    Cái bang Sơ Nhập Giang Hồ

    Có thể bạn bị Cloudflare lock vì dùng nó làm proxy, chứ nó ko cấm việc dùng domain mà không liên kết với web (Named server chẳng tốn tài nguyên là mấy.).

    Lưu trữ phim cần phải học 72 phép thần thông để né DMCA, nhưng hoá ra chẳng cái nào là toàn vẹn cả.
     
  20. lakazai

    lakazai Tân Thủ Thôn

    https://www.cloudflare.com/terms/
    2.8 Limitation on Serving Non-HTML Content

    em bị block mấy lần, mỗi lần mất 1-2 tuần :(