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