Tại sao video H.264 lại nhanh hơn nhiều trong thùng chứa FLV so với trong thùng chứa MP4?


9

Tôi đang phát triển một trang web ống và hiện đang gặp sự cố với định dạng H.264. Tôi nhận thấy rằng YouTube đã đưa các video hi-def của họ vào một thùng chứa MP4, vì vậy về mặt logic, tôi cũng làm như vậy.

Tiếp theo, tôi đã cài đặt mod_h264_streamingcho lighttpd để thực hiện công việc truyền phát và quét dòng thời gian.

Vấn đề là các tệp lớn (> 500MB ở độ phân giải hơi cao) sẽ mất mãi mãi để bắt đầu đệm (Tôi đọc rằng Flowplayer và các trình phát Flash khác cần tải xuống siêu dữ liệu trước). Tôi đã di chuyển nguyên tử xmov ra phía trước tệp bằng MP4Box (Tôi cũng đã thử Qt QuickStart), nhưng điều đó không có ích.

Tiếp theo, tôi đọc rằng tôi cần xen kẽ các bản âm thanh, vì vậy tôi cũng đã làm điều đó. Điều này gây ra không có thay đổi: các video vẫn chậm.

Vì vậy, tôi đã thử đưa bộ phim H.264 chính xác vào một thùng chứa FLV và bộ đệm phát lại bắt đầu gần như ngay lập tức - không bị chậm.

Vậy tôi còn thiếu gì ở đây? Tại sao tôi lại chọn bộ chứa MP4 với mô-đun mod_264_streaming, có vẻ siêu chậm, trên bộ chứa FLV thông thường có tích hợp của lighttpd mod_flv_streaming? Rõ ràng, nhiều trang web chọn container MP4, nhưng tôi không hiểu tại sao.

Và như một câu hỏi phụ, tôi đã thử sử dụng <video>thẻ HTML5 để thử cùng một bộ phim MP4 H.264 và quá trình cọ rửa rất nhanh ! Tôi đã xem xét tệp nhật ký của lighttpd và tôi nhận thấy rằng các trình phát Flash video.mp4?start=234sẽ xuất hiện mỗi khi dòng thời gian được xóa, trong khi các trình duyệt sử dụng <video>thẻ HTML5 gốc không làm như vậy. Đây có phải là một số hạn chế của Flash? Tại sao Flash streaming không thể nhanh như phát trực tuyến HTML5?

Câu trả lời:


4

TL; DR: MP4 được sử dụng khi trang web video lưu trữ nhiều siêu dữ liệu trong video hơn so với FLV hỗ trợ hoặc sử dụng codec âm thanh mà FLV không hỗ trợ. Sự đơn giản và thiết kế phát trực tuyến của FLV làm cho nó trở thành một lựa chọn tốt nếu bạn không có lý do chính đáng để sử dụng MP4.

Đối với việc xóa dòng thời gian của flash, tôi không biết tại sao nó lại như vậy vì tôi không bao giờ mã hóa flash, nhưng có thể đó là một núm mà nó sử dụng hoặc một cái gì đó hoạt động cụ thể với máy chủ phát trực tuyến của adobe để tìm kiếm trong tệp. Nó cũng hoạt động như một cách để ngăn chặn người dùng pesky giữ tệp trên đĩa của mình.


Một số thứ bạn đã biết:

Có sự khác biệt cơ bản giữa các container FLVMP4(còn gọi là isomedia). FLV đã được Adobe nghĩ ra từ đầu như một thùng chứa phát trực tuyến và nó thực sự rất đơn giản . Tất cả những gì nó làm là gửi một gói video, rồi gói âm thanh, rồi gói video ... Tuy nhiên, nó chỉ hỗ trợ rất ít codec và không có siêu dữ liệu nào ngoài dấu thời gian tính bằng milisecond. Trừ khi bạn cần các tính năng dành riêng cho MP4, bạn sẽ làm tốt với FLV.

Mặt khác, phương tiện truyền thông ISO dựa trên bộ chứa MOV MOV của Apple. Nó được tách ra trong các nguyên tử và có một nguyên tử cụ thể moov, cần được giải mã trước khi có thể đọc được bất kỳ nguyên tử nào khác . Vấn đề bạn gặp phải với MP4 là do moovnguyên tử được ghi ở cuối tệp, điều này dễ thực hiện hơn đối với các chương trình mã hóa. Có các công cụ, chẳng hạn như qtfaststart , sẽ thực hiện các thao tác cần thiết để đặt moovnguyên tử vào đầu tệp. Do đó, tệp sẽ bắt đầu phát lại ngay khi có dữ liệu, thay vì cần phải tải xuống đầy đủ trước khi bắt đầu.


0

Nếu bạn sử dụng một thùng chứa Mov, nó sẽ truyền ra khỏi hộp mà không cần phải cài đặt các mô-đun hoặc đặt vào một thùng chứa flv và sử dụng một mô-đun. Chỉ là suy nghĩ của tôi. Sử dụng Mov và thêm loại mime thích hợp - thực hiện.

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.