2

5.0 SDK に含まれている cudaencode の例をいじってみました。入力として YUV (非圧縮ビデオ) ファイルを受け取り、未加工の H.264 ストリーム (または VC1 の場合もあります) を書き出します。この作業は、エンコーダ API の一部である「NVEncodeFrame」関数によって実行されます。このプログラムは、エンコードの結果 (圧縮された H.264 ビデオ) が書き込まれる出力として FILE オブジェクト (stdio.h) を取ります。ここで、エンコードされているビデオをネットワークにストリーミングしたいと考えています。

私の具体的な質問は次のとおりです。

  1. HandleReleaseBitStream(int nBytesInBuffer, unsigned char *cb,void *pUserData) の "unsigned char * cb" を NAL と numberOfNals に変換する方法はありますか?

どうもありがとうございました。

4

1 に答える 1

1

libh264bitstreamfind_nal_unit()を使用します。すべてのnalが見つかるまで、データに対してこれを繰り返し呼び出します。これは、nalが標準のnalプレフィックスを持っていることを前提/要求します。また、これはバッファ内の最後のnalを検出しません。検出された最後のnalの終わりからバッファの終わりまでのすべてがもう1つのnalであると想定するか、そうでない場合は、残りのデータに次のバッファを追加して解析を続行します。 。

また、 libavformatを使用してみることもできます。これは、生のH.264ストリーム(サンプルコードav_read_frame())から読み取るときにnals(sとして)を返す必要があります。これはおそらくはるかに複雑です。AVPacket

于 2012-12-25T15:56:18.427 に答える