2015-06-18 15 views
10

Tôi đang cố chuyển đổi video .mp4 cục bộ thành HLS bằng ffmpeg trong ứng dụng iOS. Tôi đã tích hợp trình bao bọc ffmpeg bằng cách sử dụng các nhóm và tạo tất cả các tệp .ts được phân đoạn và tệp m3u8, nhưng một số phân đoạn tệp .ts không được liệt kê trong tệp danh sách .m3u8 như được hiển thị bên dưới. Nó luôn liệt kê 5 đoạn video mới nhất.Mp4 to HLS bằng cách sử dụng ffmpeg

#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 

Tôi đã sử dụng các mã sau để tạo HLS.

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); 
    }]; 

Có phương pháp nào khác để làm điều này không?

+0

Tôi đang xem xét cho phép thiết bị của người dùng mã hóa các video họ chụp, thay vì thực hiện trên máy chủ. Tôi đã tò mò liệu việc mã hóa có mất quá nhiều thời gian cho phía người dùng hay không. Bạn có thể nhận xét về trải nghiệm của bạn không? –

+0

bất kỳ thông tin nào về câu hỏi @GaziAlankus? Tôi cũng tò mò muốn mất bao lâu để có được –

+0

Tôi đã thử video với độ dài tối đa 15 phút và tất cả đều hoạt động tốt mà không tốn nhiều thời gian. Mô-đun HLS được hoàn thành trong một vài giây. Có thể sẽ mất một chút thời gian tùy thuộc vào chất lượng video và thời lượng video. –

Trả lời

2

Cuối cùng tôi cố định vấn đề này bằng cách thiết lập kích thước HLS trong FFOutputFile.m sử dụng đoạn mã sau.

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

Bạn đã thêm chính xác địa chỉ này ở đâu? Tôi đang đối mặt với cùng một vấn đề. Bạn có thể giúp? –

+0

@Bhumit: Trong FFOutputFile.m bạn có thể thấy một phương thức init - (id) initWithPath: (NSString *) tùy chọn đường dẫn: (NSDictionary *) tùy chọn. Đặt mã bên trong hàm này. –

18

Kích thước danh sách mặc định trong khi chuyển đổi thành HLS là 5. Vì vậy, bạn đang nhận được các tệp 5 .ts cuối cùng. Bạn phải đặt -hls_list_size 0 để bao gồm tất cả các tệp .ts được tạo.

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 More here

+0

Cảm ơn bạn đã trả lời, nhưng tôi nên đặt kích thước này ở đâu trong mã của mình. Tôi đang sử dụng nó trong một ứng dụng iphone. –

+1

Tôi không biết về ứng dụng iphone của bạn. Bạn có thể tìm Media Segmenter từ Apple. [link] (http://stackoverflow.com/questions/6592485/http-live-streaming) – budthapa

Các vấn đề liên quan