2012-08-08 19 views
5

Tôi gặp sự cố với việc tạo luồng FLV. Tôi đã phát triển hệ thống DVR, một nó sẽ có thể dòng video ở định dạng FLV (để chơi nó trên Actionscript NetStream). Tôi nhận được video từ bộ mã hóa trong các đơn vị H264 NAL thô (0x00 0x00 0x00 0x01), tôi cũng có thể nhận dạng được mã hóa khung IDR hoặc không phải IDR.Làm cách nào để tạo luồng FLV từ h264 thô có thể được phát bởi Actionscript NetStream?

Giải pháp của tôi để tạo ra dòng FLV (dựa trên Adobe spec: Video File Format Thông số kỹ thuật phiên bản 10) là:

  1. chờ IDR khung;
  2. đặt FLV tiêu đề
  3. đặt PrevTagSize (0)
  4. đặt FLV thẻ với thẻ video VIDEODATA với AVCVIDEODATA
  5. đặt PrevTagSize
  6. lặp lại bước 4,5 cho đến cuối dòng.

Luồng có vẻ tốt và có thể phát bởi ffplay, mplayer, vlc, v.v ... Nhưng không được phát bởi trình phát dựa trên Actionscript NetStream.

Vì vậy, tôi đã có được dữ liệu h264 liệu và chuyển đổi nó sang FLV sử dụng ffmpeg:

ffmpeg -f h264 -i d1.h264 -vcodec sao chép flv d1.flv -f

và cố gắng kết hợp cả flv's my và ffmpeg's.

Trước hết, tôi thấy rằng ffmpeg thêm tiêu đề chuỗi AVC, ngay sau tiêu đề FLV. Tôi đã bắt đầu thực hiện tương tự, nhưng NetStream vẫn không hỗ trợ luồng của tôi và một người chơi khác đã ngừng phát.

Ok, sau đó tôi tiếp tục so sánh flv's. Bây giờ tôi thấy rằng các tiêu đề đơn vị NAL trong ffmpeg mã hóa FLV một chút thay đổi, nhưng tôi không thể hiểu ý nghĩa của những thay đổi. Tôi đọc nhiều thông số kỹ thuật, nhưng không có gì hữu ích. Có ai có thể làm rõ điều này không?

Fo dụ đơn vị NAL của tôi trông như vậy: 00 00 00 01 XX XX ... - cho tất cả các đơn vị

FFmpeg NALs: 00 00 [14 BA] 61 9A ... - không IDR (hai biến số byte) 00 00 [7A 02] 65 88 ... - IDR (biến hai byte) 00 00 00 40 06 05 ... - SEI

Có thêm bộ đếm hay bất kỳ thứ gì khác không?

Sẽ rất vui khi thấy bất kỳ ý tưởng, liên kết, v.v.

+0

Tôi đang làm việc trên một FLV muxer quá và tự hỏi làm thế nào để lưu trữ các dữ liệu x264_nal_t ​​* tôi nhận được khi mã hóa bằng cách sử dụng x264_encoder_encode. Bạn có làm cho luồng của mình hoạt động không? bạn có thể giải thích cách tiếp cận của bạn một chút không? – pollux

Trả lời

1

Có hai định dạng đóng gói bitum H.264 phổ biến.

  1. Phụ lục B chứa bắt đầu mã: 00 00 01
  2. MP4 là chiều dài tiền tố XX XX XX XX

Bạn đang tạo phụ lục B nhưng nó có vẻ như bạn cần định dạng đóng gói mp4 (chiều dài tiền tố) cho FLV. Bạn phải xóa (00) 00 00 01 và thêm độ dài làm tiền tố.

3

Cố gắng sử dụng lệnh sau đây để làm việc:

ffmpeg -y -i test.flv -vcodec copy -vbsf h264_mp4toannexb test.h264 

Bạn sẽ nhận được một tập tin vlc .h264 chơi, tất cả NAL được bắt đầu với 00 00 00 01.