Sự hiểu biết của tôi về mp4 phân mảnh là nó là một tệp duy nhất, nhưng nội bộ nó được cấu trúc dưới dạng phân đoạn. Ai đó có thể giải thích cho tôi về cách những đoạn này có thể được giải quyết trong tệp .mpd cho DASH không? Các tập tin .mpd mà tôi đã nhìn thấy dường như để giải quyết các phân đoạn khác nhau với các url riêng biệt, nhưng một mp4 phân mảnh, tôi tưởng tượng, sẽ phải được giải quyết bằng cách bù đắp byte vào cùng một url. Làm thế nào để trình duyệt sau đó biết những gì thời gian tương ứng với những gì byte phạm vi?MPEG-DASH và mp4 phân mảnh
Trả lời
Đây là một example mpd cho cấu hình chính MPEG DASH. Các tập tin mp4 được mô tả bởi mpd này là một mp4 phân mảnh. Như bạn thấy:
<SegmentURL media="bunny_15s_200kbit/bunny_200kbit_dashNonSeg.mp4" mediaRange="868-347185"/>
<SegmentURL media="bunny_15s_200kbit/bunny_200kbit_dashNonSeg.mp4" mediaRange="347186-664464"/>
Tại <SegmentURL>
phần tử, các mảnh vỡ có thể được giải quyết vào url giống nhau, và bạn có thể tìm offsets byte tại @mediaRange
thuộc tính.
Máy chủ có tệp kê khai có thể được tạo bằng cách quét tệp cho các hộp moof. Một moof + mdat = một đoạn. Khi một yêu cầu cho một mảnh được thực hiện, các tập tin bù đắp được nhìn lên trong biểu hiện và các hộp chính xác được trả về.
Có phải tệp kê khai mà bạn đang nói đến chỉ là tệp kê khai (tệp .mpd) được gửi cho khách hàng không? Ở khắp mọi nơi mà tôi đọc về DASH, biểu hiện duy nhất mà họ nói đến là tệp được gửi cho khách hàng, vì vậy tôi không biết – bhh1988
Kinh nghiệm của tôi là ở dạng Silverlight, nó là một định dạng tệp kê khai khác nhau, nhưng có cùng định dạng tệp video. Trong Silverlight, bạn cung cấp tệp kê khai máy chủ (ism) Tuy nhiên tệp kê khai được tạo bằng cách quét tệp phương tiện.Tôi giả định rằng tệp kê khai được tạo bởi máy chủ được lưu trong bộ nhớ cho dấu gạch ngang. Nhưng bạn nghi thức tôi không chắc chắn 100%. – szatmary
Theo như tôi hiểu nó ... Trong trường hợp hồ sơ DASH 'onDemand', đó là công việc của trình bao gói DASH để tạo tệp * .mpd (tệp kê khai) và chỉ định dải byte nào ánh xạ tới một phân đoạn (có thể là một số đoạn). Sau đó, máy khách sẽ tải tệp * .mpd và thực hiện các yêu cầu phạm vi byte http cho các phạm vi trong tệp kê khai. Tôi nghĩ rằng hồ sơ 'sống' của DASH tương tự như việc phát trực tuyến mượt mà trong mỗi phân khúc có một url.
Nếu bạn cần tìm vị trí của các đoạn trong hộp chứa mp4, tôi tin rằng thông tin này nằm trong hộp 'sidx' của đoạn.
Tệp .mpd có danh sách các phân đoạn có phạm vi byte như được hiển thị ở trên. Để truy cập các phân đoạn, bạn cần phải phân tích cú pháp thuộc tính mediarange cho mỗi dòng và yêu cầu nó với thứ gì đó như XHR với setRequestHeader để chỉ định phạm vi byte. Với phương pháp này, không có thành phần máy chủ cần thiết. Dưới đây là một số mã tôi đã sử dụng:
var xhr = new XMLHttpRequest();
// Range is in format of 1234-34567
// url is the .mp4 file path
if (range || url) { // make sure we've got content in our params
xhr.open('GET', url);
xhr.setRequestHeader("Range", "bytes=" + range);
xhr.send();
xhr.responseType = 'arraybuffer';
try {
// watch the ready state
xhr.addEventListener("readystatechange", function() {
if (xhr.readyState == 4) { //wait for video to load
// add response to buffer
try {
// videoSource is a sourceBuffer on your mediaSource object.
videoSource.appendBuffer(new Uint8Array(xhr.response));
videoSource.onreadystatechange = function() {
if (videoSource.readyState == videoSource.done) {
videoElement.play();
}
};
} catch (e) {
// fail quietly
}
}
}, false);
Có vẻ như ffmpeg hiện có support for HLS directly as well.
- 1. Xây dựng lại tệp MP4 từ nguyên tử MP4 "mdat" bị phân mảnh?
- 2. Làm thế nào để đầu ra mp4 phân mảnh với ffmpeg?
- 3. Phân mảnh và ghép nối IP
- 4. Phân mảnh IP UDP và MTU
- 5. Phân mảnh bên trong và bên ngoài
- 6. MediaSource API và mp4
- 7. Chống phân mảnh đĩa cứng ảo (.vhd)?
- 8. Chiến lược phân mảnh Heap của Android?
- 9. Phân mảnh Heap đối tượng lớn
- 10. Đống của tôi bị phân mảnh
- 11. phân mảnh heap được quản lý
- 12. phân tích sự phân mảnh của tệp trong Windows 7
- 13. Android FragmentTab chủ và Những mảnh vỡ bên trong mảnh vỡ
- 14. Phân phối và lưu trữ MP4 PseudoStreaming (tìm kiếm) với Nginx
- 15. Công cụ để kiểm tra phân mảnh bộ nhớ
- 16. Xử lý phân mảnh trong vùng bộ nhớ?
- 17. Ngăn vòng lặp trong trình đổ mảnh phân đoạn
- 18. Làm cách nào để tránh phân mảnh heap?
- 19. Hỗ trợMapFragment - khả năng hiển thị phân mảnh bản đồ
- 20. Điều hướng phân mảnh các thiết bị iOS cũ/mới
- 21. Phân mảnh gói khi gửi dữ liệu qua SSLStream
- 22. Cách xem phân mảnh của một tệp cụ thể?
- 23. Điều hướng mảnh vỡ Android và backstack
- 24. Kịch bản để xây dựng lại và tái lập chỉ mục phân mảnh?
- 25. Việc sử dụng bộ nhớ và phân mảnh các lớp ảnh .NET: Bitmap so với Metafile
- 26. Sửa video MP4/Webm
- 27. đúng loại mime cho .mp4
- 28. UIWebview không phát mp4 Video
- 29. Vị trí mảnh vỡ GLSL
- 30. Phân phối video MP4 qua PHP không thành công trong Google Chrome
Tôi thấy không ai trả lời phần 2 câu hỏi của bạn "Làm cách nào để trình duyệt biết thời gian nào tương ứng với byte nào?" : ( –