2011-11-24 17 views
6

मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जहां उपयोगकर्ता वीडियो अपलोड करते हैं और jwplayer, jplayer, flowplayer इत्यादि का उपयोग करके ब्राउज़र को वापस चलाते हैं। कुछ वीडियो तुरंत खेलते हैं, जबकि अन्य पूरी वीडियो फ़ाइल डाउनलोड होने तक प्रतीक्षा करते हैं।क्यों कुछ एमपी 4 वीडियो पूरी फ़ाइल डाउनलोड होने तक स्ट्रीमिंग शुरू नहीं करेंगे?

मैं वीडियो को एमपी 4 प्रारूप में परिवर्तित करने के लिए ffmpeg का उपयोग कर रहा हूं।

यहां दी गई वीडियो फ़ाइलों में से एक के बारे में कुछ विस्तृत जानकारी यहां दी गई है।

General 
Complete name     : 429183132058337290450_AutoFF.mp4 
Format       : MPEG-4 
Format profile     : Base Media 
Codec ID       : isom 
File size      : 10.2 MiB 
Duration       : 24s 333ms 
Overall bit rate     : 3 501 Kbps 

Video 
ID        : 1 
Format       : AVC 
Format/Info      : Advanced Video Codec 
Format profile     : [email protected] 
Format settings, CABAC   : Yes 
Format settings, ReFrames  : 3 frames 
Codec ID       : avc1 
Codec ID/Info     : Advanced Video Coding 
Duration       : 24s 333ms 
Bit rate mode     : Variable 
Bit rate       : 3 351 Kbps 
Width       : 1 024 pixels 
Height       : 560 pixels 
Display aspect ratio    : 16:9 
Frame rate mode     : Constant 
Frame rate      : 30.000 fps 
Color space      : YUV 
Chroma subsampling    : 4:2:0 
Bit depth      : 8 bits 
Scan type      : Progressive 
Bits/(Pixel*Frame)    : 0.195 
Stream size      : 9.72 MiB (96%) 
Language       : Japanese 

उत्तर

6

मुझे कुछ एमपी 4 वीडियो के साथ भी यह समस्या थी। मैं अपलोड किए गए वीडियो को एमपी 4 (एच .264 + एएसी) में परिवर्तित कर रहा था और वे बफर नहीं करेंगे। कारण यह है कि इस प्रारूप में फ़ाइल के अंत में प्लेबैक के लिए आवश्यक कुछ महत्वपूर्ण मेटाडेटा शामिल है, इसलिए प्लेबैक शुरू होने से पहले पूरी फ़ाइल को लोड करना होगा। समाधान रूपांतरण के परिणामस्वरूप qt-faststart (https://github.com/danielgtaylor/qtfaststart) नामक एक छोटे से प्रोग्राम का उपयोग करना था। यह प्रोग्राम प्रगतिशील-डाउनलोड प्लेबैक को संभव बनाने वाली फ़ाइल की शुरुआत में इस मेटाडेटा को स्थानांतरित करता है। -movflags +faststart साथ

<video preload="metadata"><source src="..." /></video> 
0

मैं जब ffmpeg का उपयोग कर MP4 वीडियो बनाने के लंबे समय के लिए यह एक ही समस्या थी विकल्प। यह फ़ाइल की शुरुआत में moov परमाणु को स्थानांतरित करेगा, इस प्रकार क्लाइंट द्वारा पहले प्लेबैक को पूरी तरह से डाउनलोड करने की आवश्यकता के बिना प्लेबैक शुरू करने की अनुमति होगी।

आप अपने एन्कोडिंग आदेश में उपयोग कर सकते हैं, या आप किसी मौजूदा फ़ाइल और बस फिर से mux के साथ उपयोग कर सकते हैं:

ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4 
5

उपयोग ffmpeg: क्या अंत में काम किया, बस एचटीएमएल 5 टैग करने के लिए प्रीलोड = "मेटाडेटा" जोड़ने की गई थी -

संबंधित मुद्दे