Tải xuống HTTP lũy tiến có phải là sự thay thế khả thi cho HLS / DASH / RTMP để cung cấp video trực tiếp không?


16

Tôi đang làm việc trên một trang web cần truyền phát video trực tiếp tới người dùng và như vậy tôi đã phải suy nghĩ về tình trạng đáng tiếc của công nghệ truyền phát video dựa trên trình duyệt hiện tại. Các giải pháp phổ biến nhất để phát trực tiếp hiện nay đều có vấn đề tương thích; RTMP đòi hỏi Flash, HLS chỉ natively hỗ trợ trên Safari và Chrome dành cho Android, DASH không natively hỗ trợ bất cứ nơi nào, và sử dụng dash.js đòi hỏi truyền thông Nguồn Extensions , mà chưa được hỗ trợ rộng rãi.

Điều này dẫn đến một câu hỏi mà đối với tôi có vẻ hiển nhiên: có thể sử dụng tải xuống lũy ​​tiến đơn giản như một giải pháp thay thế cho các giao thức như HLS, RTMP và DASH yêu cầu hỗ trợ trình duyệt hoặc plugin không?

Ý tưởng sử dụng tải xuống lũy ​​tiến để truyền phát trực tiếp phương tiện truyền thông không phải là chưa từng có; mọi người đã làm nó cho âm thanh. Các công cụ như liveCaster cho phép bạn truyền phát âm thanh MP3 trực tiếp thông qua một phản hồi HTTP lũy tiến duy nhất mà không cần tệp MP3 được ghi sẵn và các thư viện như AmplitudeJS đã hết cách để thêm các tính năng liên quan đến loại phát trực tiếp âm thanh này .

Mặc dù vậy, tôi chưa thấy bất kỳ trường hợp nào của kỹ thuật này được sử dụng trong tự nhiên cho video và tôi không thể biết tại sao. Có vẻ như nó sẽ loại bỏ một lớp các vấn đề tương thích phía trình duyệt lộn xộn và khó khăn cho sự đánh đổi tương đối ít. (Và khả năng tương thích vẫn là một vấn đề lớn đối với phát trực tiếp, ngay cả khi những người chuyên nghiệp làm điều đó; nếu tôi cố xem video trực tiếp trên iPlayer của BBC trên Firefox, nó chỉ cho tôi một thông báo lỗi cho tôi biết để cài đặt Flash.) kỹ thuật này, và tôi chưa bao giờ thấy ai thậm chí đề cập đến ý tưởng ngoài tôi.

Tại sao? Có một giới hạn cơ bản mà tôi không thấy sẽ khiến cho việc truyền phát tệp video như MP4 qua tải xuống liên tục khi nó được tạo và phát trong <video>phần tử khi tải xuống không thể thực hiện được?


Bạn không thể sử dụng thư viện javascript của HLS (ví dụ: hls.js tại đây: github.com/video-dev/hls.js/tree/master ) để thêm hỗ trợ HLS trình duyệt chéo cho trang của bạn? Tôi đoán điều này có lẽ không tồn tại khi bạn hỏi câu hỏi này ban đầu ... nhưng, nó hiện tại. :)
mắc kẹt vào

Câu trả lời:


3

Câu hỏi của bạn là hợp lệ và về mặt lý thuyết tôi nghĩ bạn có thể sử dụng Tải xuống lũy ​​tiến để phát trực tiếp video. Trên thực tế Rất nhiều Video phát trực tuyến như YouTube, v.v. đã sử dụng HTTP. Tôi giả sử bạn đang nói nghiêm túc về WEBCAM streaming và không chỉ trực tuyến.

Bạn sẽ phải tự thực hiện các trường hợp sử dụng Live Streaming! Mà nếu không thì các giao thức truyền phát (RTMP, v.v.) tự làm. Dưới đây là một số lý do để thích các giao thức và kiến ​​trúc này:

1. Tốc độ bit biến

Hầu hết video phát trực tiếp được mã hóa bằng VBR và video của bạn sẽ phải nhanh chóng thích ứng với việc thay đổi tắc nghẽn mạng của khách hàng. Vì vậy, video của bạn có thể chuyển đổi nhiều độ phân giải trong một thời gian rất ngắn tùy thuộc vào tốc độ kết nối máy khách nhanh hay chậm.

Theo Wikipedia

Nó hoạt động bằng cách phát hiện băng thông và dung lượng CPU của người dùng trong thời gian thực và điều chỉnh chất lượng của luồng video phù hợp

2. Nội dung trực tiếp

Điểm quan trọng nhất là Live streaming có nghĩa là nội dung trực tiếp . Không giống như HTTP Progressive Download, bạn không thể đệm bất cứ lúc nào. Người dùng phải xem khung hình mới nhất dành cho cả thế giới và không thể tụt lại phía sau.

3. Vô hiệu hóa Tìm kiếm

Một vấn đề nhỏ, nhưng giao thức nên đặc biệt không cho phép người dùng tìm kiếm ngược (và rõ ràng là chuyển tiếp). Điều này không chỉ được kiểm soát ở cấp độ Trình phát video mà còn ở cấp độ mạng.

4. Thường xuyên ngắt kết nối / mạng không đáng tin cậy

Tôi có một chút không rõ ràng về điểm này nhưng tôi biết rằng một khi tải xuống HTTP đến bị ngắt kết nối, có thể mất một thời gian để thiết lập một cái bắt tay khác (ngay cả với keep-alive). Giao thức trực tiếp nhanh hơn nhiều để kết nối và ngắt kết nối vì điểm tiếp theo ->

5. Độ trễ

HTTP vốn đã chạy trên TCP , cung cấp các gói tin được đảm bảo. So sánh điều này với UDP được sử dụng trong rất nhiều giao thức (đặc biệt là chơi nhiều người chơi trực tiếp) trong đó tốc độ được ưu tiên hơn các đảm bảo.

Để biết thêm xem tại đây -> https://en.wikipedia.org/wiki/Streaming_media#Prot Protocol

6. Sao chép nội dung

Hầu hết các máy chủ phát trực tiếp sẽ chỉ đáp ứng với nội dung của thời gian hiện tại. Mặc dù vẫn có thể sao chép nội dung của các luồng trực tiếp, nhưng người ta phải dùng đến tính năng chụp màn hình, v.v. Việc tải xuống HTTP lũy tiến khiến nhiệm vụ sao chép nội dung khá tầm thường (do đó rất nhiều người tải xuống YouTube ngoài đó).

Bây giờ, HTTP có thể được mô hình hóa để cung cấp hầu hết các mục trên.

Bạn đã đề cập đến HTTP Live Streaming (HLS) của Apple , gần nhất với những gì bạn đang cố gắng đạt được.

Và có nghiên cứu tích cực đang diễn ra trong lĩnh vực này như được đưa ra ở đây -> http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=65749&PageNum=2

Tôi đang tìm kiếm thêm thông tin và sẽ cập nhật câu trả lời này.


Dường như không chính xác khi đề cập đến độ trễ vì bất lợi khi sử dụng tải xuống lũy ​​tiến HTTP do các đối thủ cạnh tranh chính bao gồm DASH và HLS cung cấp các phân đoạn video thông qua nhiều yêu cầu HTTP liên tiếp. Tôi không biết từng chi tiết của các giao thức, nhưng tôi cho rằng cách tiếp cận sau yêu cầu độ trễ tối thiểu ít nhất là độ dài phân đoạn được sử dụng, trong khi với phương pháp tải xuống lũy ​​tiến không có độ trễ tối thiểu theo lý thuyết - độ trễ thấp hơn nên một quảng cáo thuận lợi của phương pháp tải xuống lũy ​​tiến, phải không?
Đánh dấu Amery

Ngoài ra, một số mối quan tâm khác ở đây - như tìm kiếm và khôi phục từ việc ngắt kết nối - là các vấn đề áp dụng như nhau đối với việc triển khai JavaScript của DASH, nhưng dash.js có lẽ đã khắc phục được chúng. Tôi tưởng tượng họ có thể khắc phục được một trình phát tải xuống lũy ​​tiến chỉ bằng cách đánh cắp bất kỳ giải pháp nào mà các nhà phát triển dash.js đã đưa ra.
Đánh dấu Amery

@MarkAmery Nếu bạn so sánh với DASH và HLS thì có, tôi đoán nó có thể so sánh được. Nhưng, nếu bạn so sánh nó với một số giao thức cũ hơn UDP thì HTTP sẽ thất bại! Ngay cả khi bạn thấy rất nhiều hệ thống thời gian thực ngày nay được xây dựng bằng Websockets và tránh HTTP vì các vấn đề về độ trễ của nó.
Gaurav Ramanan

1
Mặc dù dễ sao chép nội dung là một bất lợi thực sự so với dash.js và HLS. Và tôi không chắc làm thế nào các luồng tốc độ bit có thể được thực hiện bằng cách sử dụng tải xuống lũy ​​tiến, mặc dù tôi hy vọng nó có thể thực hiện được với một chút tinh ranh.
Đánh dấu Amery

@MarkAmery Khi nói đến thời gian thực và phát trực tiếp, chúng ta phải xem xét hiệu suất và không chỉ là khả năng. Tôi sẽ xem xét DASH nhưng tôi tự hỏi liệu có điểm chuẩn nào cho thấy sự so sánh hiệu suất giữa Giao thức truyền phát và phục hồi HTTP từ việc ngắt kết nối.
Gaurav Ramanan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.