fppeg

2015-06-18 8 views
10

का उपयोग कर एमपी 4 से एचएलएस तक मैं एक आईओएस ऐप में ffmpeg का उपयोग कर स्थानीय .mp4 वीडियो को एचएलएस में परिवर्तित करने की कोशिश कर रहा हूं। मैंने फोड का उपयोग करके ffmpeg wrapper को एकीकृत किया है और सभी खंडित .ts फ़ाइलों और m3u8 फ़ाइल जेनरेट की है, लेकिन कुछ .ts फ़ाइल सेगमेंट नीचे दिखाए गए .m3u8 प्लेलिस्ट फ़ाइल में सूचीबद्ध नहीं हैं। यह हमेशा पिछले 5 वीडियो खंडों को सूचीबद्ध करता है।fppeg

#EXTM3U 
#EXT-X-VERSION:3 
#EXT-X-TARGETDURATION:2 
#EXT-X-MEDIA-SEQUENCE:13 
#EXTINF:2, 
out13.ts 
#EXTINF:1, 
out14.ts 
#EXTINF:2, 
out15.ts 
#EXTINF:2, 
out16.ts 
#EXTINF:1, 
out17.ts 
#EXT-X-ENDLIST 

मैंने एचएलएस उत्पन्न करने के लिए निम्नलिखित कोड का उपयोग किया।

FFmpegWrapper *wrapper = [[FFmpegWrapper alloc] init]; 
    [wrapper convertInputPath:inputFilePath outputPath:outputFilePath options:nil progressBlock:^(NSUInteger bytesRead, uint64_t totalBytesRead, uint64_t totalBytesExpectedToRead) { 

    } completionBlock:^(BOOL success, NSError *error) { 
     success?NSLog(@"Success...."):NSLog(@"Error : %@",error.localizedDescription); 
    }]; 

क्या ऐसा करने के लिए कोई और तरीका है?

+0

मैं उपयोगकर्ताओं के डिवाइस को सर्वर पर करने के बजाए उनके द्वारा ली गई वीडियो को एन्कोड करने पर विचार कर रहा हूं। मैं उत्सुक था कि क्या एन्कोडिंग उपयोगकर्ता के पक्ष में बहुत अधिक समय लेगा। क्या आप अपने अनुभव पर टिप्पणी कर सकते हैं? –

+0

@GaziAlankus प्रश्न पर कोई जानकारी? मैं भी उत्सुक हूं कि –

+0

में कितना समय लगेगा मैंने 15 मिनट तक वीडियो की कोशिश की है और यह सब कुछ ठीक समय के बिना काम कर रहा है। एचएलएस मॉड्यूल कुछ सेकंड में पूरा हो जाता है। वीडियो गुणवत्ता और वीडियो की लंबाई के आधार पर इसमें कुछ समय लगेगा। –

उत्तर

2

अंत में मैं FFOutputFile.m में HLS आकार सेट निम्नलिखित कोड का उपयोग कर इस समस्या का समाधान हो।

av_opt_set_int(formatContext->priv_data, "hls_list_size", list_size, 0); 
+0

आपने इसे वास्तव में कहां जोड़ा? मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आप मदद कर सकते हैं? –

+0

@ भुमिट: FFOutputFile.m में आप एक इनिट विधि देख सकते हैं - (आईडी) initWithPath: (NSString *) पथ विकल्प: (NSDictionary *) विकल्प। इस फ़ंक्शन के अंदर कोड सेट करें। –

18

एचएलएस में कनवर्ट करते समय डिफ़ॉल्ट सूची आकार 5 है। तो, आपको अंतिम 5 .ts फाइलें मिल रही हैं। सभी जेनरेट की गई .ts फ़ाइलों को शामिल करने के लिए आपको -hls_list_size 0 सेट करना होगा।

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8 अधिक here

+0

आपके उत्तर के लिए धन्यवाद, लेकिन मुझे अपने कोड में यह आकार कहां सेट करना चाहिए। मैं इसे एक आईफोन ऐप में उपयोग कर रहा हूं। –

+1

मुझे आपके आईफोन ऐप के बारे में पता नहीं है। आप एप्पल से मीडिया फाइल सेगमेंटर की तलाश कर सकते हैं। [लिंक] (http://stackoverflow.com/questions/6592485/http-live- स्ट्रीमिंग) – budthapa