ทำไมวิดีโอ H.264 ถึงเร็วกว่ามากในคอนเทนเนอร์ FLV มากกว่าในคอนเทนเนอร์ MP4


9

ฉันกำลังพัฒนาไซต์หลอดและขณะนี้มีปัญหาเกี่ยวกับรูปแบบ H.264 ฉันสังเกตเห็นว่า YouTube นำวิดีโอความละเอียดสูงของพวกเขาไปไว้ในที่เก็บ MP4 ดังนั้นฉันจึงทำเช่นเดียวกัน

ต่อไปฉันติดตั้งmod_h264_streaminglighttpd เพื่อให้การสตรีมและไทม์ไลน์ขัดถูทำงาน

ปัญหาคือไฟล์ขนาดใหญ่ (> 500MB ที่ความละเอียดค่อนข้างสูง) ใช้เวลาตลอดไปในการเริ่มบัฟเฟอร์ (ฉันอ่าน Flowplayer และผู้เล่น Flash คนอื่น ๆ จำเป็นต้องดาวน์โหลดข้อมูลเมตาก่อน) ฉันย้ายอะตอม xmov ไปที่ด้านหน้าของไฟล์ด้วย MP4Box (ฉันลอง Qt QuickStart ด้วย) แต่นั่นก็ไม่ได้ช่วยอะไร

ต่อไปฉันอ่านว่าฉันต้องสอดแทรกแทร็กเสียงดังนั้นฉันก็ทำได้เช่นกัน สิ่งนี้ทำให้ไม่มีการเปลี่ยนแปลง: วิดีโอยังคงช้า

ดังนั้นฉันจึงลองใส่ภาพยนตร์ H.264 ที่เหมือนกันลงในคอนเทนเนอร์ FLV และการบัฟเฟอร์การเล่นเริ่มต้นเกือบจะทันที - ไม่มีความช้า

ดังนั้นสิ่งที่ฉันหายไปที่นี่ ทำไมฉันจะเลือกภาชนะ MP4 กับโมดูลmod_264_streamingซึ่งดูเหมือนว่าซุปเปอร์ช้ากว่าภาชนะ FLV ปกติกับ lighttpd ในตัวmod_flv_streaming? เห็นได้ชัดว่าเว็บไซต์จำนวนมากเลือกที่เก็บ MP4 แต่ฉันไม่เข้าใจว่าทำไม

และตามคำถามด้านข้างฉันลองใช้<video>แท็กHTML5 เพื่อลองภาพยนตร์ H.264 MP4 แบบเดียวกันและการขัดถูนั้นเร็วมาก ! ฉันมองเข้าไปในล็อกไฟล์ของ lighttpd และฉันสังเกตว่าผู้เล่น Flash ต่อท้ายvideo.mp4?start=234ทุกครั้งที่ไทม์ไลน์ถูกขัดขณะที่เบราว์เซอร์ที่ใช้<video>แท็กHTML5 ดั้งเดิมไม่ทำสิ่งนั้น นี่เป็นข้อ จำกัด ของ Flash ไหม? เหตุใด Flash สตรีมมิ่งจึงไม่เร็วเท่ากับสตรีมมิ่ง HTML5

คำตอบ:


4

TL; DR: MP4 ใช้เมื่อไซต์วิดีโอเก็บข้อมูลเมตาในวิดีโอมากกว่าที่รองรับ FLV หรือใช้ตัวแปลงสัญญาณเสียงที่ FLV ไม่รองรับ ความเรียบง่ายและการออกแบบสตรีมมิ่งของ FLV ทำให้เป็นตัวเลือกที่ดีถ้าคุณไม่มีเหตุผลที่ดีในการใช้ MP4

สำหรับไทม์ไลน์ของการขัดแฟลชฉันไม่รู้เลยว่าทำไมมันถึงเป็นแบบนั้นเพราะฉันไม่เคยใช้รหัสแฟลช แต่เป็นไปได้ว่ามันเป็นปุ่มที่ใช้ นอกจากนี้ยังใช้เป็นวิธีหยุดผู้ใช้ที่น่ารำคาญจากการเก็บไฟล์ไว้ในดิสก์ของเขา


บางสิ่งที่คุณรู้อยู่แล้ว:

มีความแตกต่างพื้นฐานระหว่างภาชนะบรรจุFLVและMP4(aka isomedia) FLV ได้วางแผนโดย Adobe ตั้งแต่เริ่มต้นเป็นภาชนะสตรีมมิ่งและก็จริงๆแช่งง่าย สิ่งที่มันทำคือการส่งแพ็คเก็ตวิดีโอแล้วแพ็คเก็ตเสียงแล้วแพ็คเก็ตวิดีโอ ... แต่มันรองรับตัวแปลงสัญญาณเพียงไม่กี่ตัว หากคุณไม่ต้องการฟีเจอร์เฉพาะของ MP4 คุณก็ทำได้ดีกับ FLV

ในทางตรงกันข้ามสื่อ ISO นั้นใช้ MOV container ของ Apple มันแยกออกเป็นอะตอมและมีอะตอมเฉพาะmoovที่ต้องถอดรหัสก่อนที่อะตอมอื่นจะสามารถอ่านได้ ปัญหาที่คุณเกิดขึ้นกับ MP4 นั้นเป็นเพราะmoovอะตอมถูกเขียนที่ท้ายไฟล์ซึ่งง่ายกว่ามากในการเข้ารหัสโปรแกรม มีเครื่องมือเช่นqtfaststartซึ่งจะทำการ munging ที่จำเป็นเพื่อวางmoovatom ที่จุดเริ่มต้นของไฟล์ ดังนั้นไฟล์จะเริ่มเล่นทันทีที่มีข้อมูลแทนที่จะต้องดาวน์โหลดแบบสมบูรณ์ก่อนเริ่มต้น


0

หากคุณใช้ mov container มันจะสตรีมออกจากกล่องโดยไม่จำเป็นต้องติดตั้งโมดูลหรือวางลงในคอนเทนเนอร์ flv และใช้โมดูล แค่ความคิดของฉัน ใช้ mov และเพิ่มประเภท mime ที่เหมาะสม - ทำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.