0

プログラムの FLV パケットを取得する必要があるアプリで FFMPEg コードを使用しました。これには、avcodec_encode_video2() を使用します。私の問題は、関数が完全な FLV 形式を保持せず、本体のみを保持する AVPacket パケットを作成することです。しかし、私はまだそのヘッダーが必要です。通常は別の関数 (av_write_frame()) で作成されます。私の要件に合わないため、アプリで av_write_frame() を使用できません。したがって、avcodec_encode_video2() によって作成されたパケットに FLV ヘッダーを追加できる ffmpeg ライブラリの関数を知っている人がいるかもしれません。

4

1 に答える 1

0

FLV ヘッダー自体は比較的単純です。

次のコードでモデル化できます。

/* FLV file header */
#define FLV_SIGNATURE       "FLV"
#define FLV_VERSION         ((uint8)0x01)

#define FLV_FLAG_VIDEO      ((uint8)0x01)
#define FLV_FLAG_AUDIO      ((uint8)0x04)

typedef struct __flv_header {
    uint8_t         signature[3]; /* always "FLV" */
    uint8_t         version; /* should be 1 */
    uint8_t         flags;
    uint32_t        offset; /* always 9 */
} flv_header;

このflagsフィールドは、ファイルがビデオ、オーディオ、または両方のストリームを所有しているかどうかを示すビットマスクです。たとえば、ファイルにオーディオとビデオが含まれている場合、その値は 5 になります。

フィールドがビッグ エンディアンでエンコードされていることに注意してくださいoffset。これは、リトル エンディアン プラットフォームでは値 150994944 で表されます。

このような構造を使用したくなく、バッファを直接書き込む方法がある場合は、次のように作成できます。

uint_8 buffer[9] = {0x46, 0x4c, 0x56, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09};
于 2012-05-25T12:45:27.510 に答える