av_write_frame および av_interleaved_write_frame
2022-02-25 06:51:22
1. 機能の紹介
av_interleaved_write_frame関数の紹介です。
- /**
- * パケットを出力メディアファイルへ書き込む。
- <スパン <スパン *
- * この関数は、必要に応じてパケットを内部でバッファリングして
- * 出力ファイルのパケットは、以下の順序で適切にインターリーブされています。
- <スパン * 独自のインターリーブを行う呼び出し元は、以下のように呼び出す必要があります。
- * この関数の代わりに、av_write_frame() を使用します。
- <スパン *
- * @param s メディアファイルハンドル
- * @param pkt 書き込むべきデータを含むパケット。
- <スパン * <br>
- * パケットが参照カウントされている場合、この関数は
- * この参照は所有権を持ち、後で
- <スパン * フィットする。
- * 呼び出し元は、この参照を通じてデータにアクセスしてはならない。
- * パケットが参照カウントされていない場合、この関数が返されます。
- * libavformatはコピーを作成します。
- <スパン * <br>
- * このパラメータはNULLでも構いません。
- * インターリーブキューをフラッシュします。
- <スパン * <br>
- * パケットの @ref AVPacket.stream_index "stream_index" フィールドは、必ず
- * の対応するストリームのインデックスに設定されます。
- * AVFormatContext.streams "s->streams". これは、非常に強く
- * タイミング情報(@ref AVPacket.pts "pts", @ref)を推奨します。
- * AVPacket.dts "dts", @ref AVPacket.duration "duration") にセットされます。
- * 正しい値です。
- <スパン *
- * 成功すれば 0 を、エラーなら負の AVERROR を返します。
- * この関数が失敗した場合でも、パケットを解放する処理を行います。
- <スパン *
- * @see av_write_frame(), AVFormatContext.max_interleave_delta
- <スパン */
- int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
av_write_frame関数の紹介です。
- /**
- * パケットを出力メディアファイルへ書き込む。
- <スパン *
- * この関数は、パケットをバッファリングすることなく直接 Muxer に渡します。
- * 呼び出し元は、以下のように正しくインターリーブする責任があります。
- <スパン * libavformatにパケットを処理させたい呼び出し元は、以下のようになります。
- * インターリーブは、この代わりに av_interleaved_write_frame() を呼び出す必要があります。
- * 機能です。
- <スパン *
- * @param s メディアファイルハンドル
- * @param pkt 書き込むべきデータを含むパケット。
- * av_interleaved_write_frame()では、この関数では
- * 渡されたパケットの所有権(ただし、一部のMuxerでは
- * 入力パケットへの内部参照)。
- <スパン * <br>
- * このパラメータは、NULLでも構いません(最後だけでなくいつでも)。
- * Muxer 内にバッファリングされたデータを即座にフラッシュするため。
- * に書き込む前に、内部でデータをバッファリングするミューサーです。
- * 出力されます。
- <スパン * <br>
- * パケットの @ref AVPacket.stream_index "stream_index" フィールドは、必ず
- * の対応するストリームのインデックスに設定されます。
- * AVFormatContext.streams "s->streams". これは、非常に強く
- * タイミング情報(@ref AVPacket.pts "pts", @ref)を推奨します。
- * AVPacket.dts "dts", @ref AVPacket.duration "duration") にセットされます。
- * 正しい値です。
- * エラーが発生した場合は 0 を、OK の場合は = 0 を、フラッシュされてもうフラッシュするデータがない場合は 1 を返します。
- <スパン *
- * @see av_interleaved_write_frame()
- <スパン */
- int av_write_frame(AVFormatContext *s, AVPacket *pkt);
2. 機能呼び出し図
av_interleaved_write_frame 関数呼び出しの図。
av_write_frame 関数呼び出しの図。
3. 機能コード
av_interleaved_write_frameのファンクションコードです。
- イント av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
- <スパン {
- int ret, flush = 0;
- //pktが合法かどうかをチェックする
- ret = check_packet(s, pkt);
- もし (ret < 0)
- <スパン 行く を失敗させる。
- <スパン もし <スパン (pkt) {
- AVStream *st = s->streams[pkt->stream_index];
- av_dlog(s, "av_interleaved_write_frame size:%d dts:%s pts:%s\n" ,
- pkt->size, av_ts2str(pkt->dts), av_ts2str(pkt->pts));
- <スパン もし ((ret = compute_pkt_fields2(s, st, pkt)) < 0 && ! (s->oformat->flags & AVFMT_NOTIMESTAMPS)) // pts、dts、durationの計算とチェック
- 行く を失敗させる。
- <スパン もし (pkt->dts == AV_NOPTS_VALUE && ! (s->oformat->flags & AVFMT_NOTIMESTAMPS)) {。
- ret = AVERROR(EINVAL)。
- 行く を失敗させる。
- }
- } さもなければ {
- <スパン av_dlog(s, "av_interleaved_write_frame FLUSHn" );
- フラッシュ = 1;
- }
- <スパン について (;; ) {
- AVPacket opkt;
- int ret = interleave_packet(s, &opkt, pkt, flush);
- もし <スパン (pkt) {
- memset(pkt, 0, サイズオブ (*pkt))のようになります。
- av_init_packet(pkt);
- pkt = NULL。
- }
関連
-
Python using pip to install modules with ReadTimeoutError: HTTPSConnectionPoolの解決策
-
C++ ベクトル検索エラー: 'find(std::vector<int>::iterator, std::v)' の呼び出しにマッチする関数がありません。
-
TensorFlowのネイティブランタイムソリューションのロードに失敗しました。
-
java lang ClassCastException java util ArrayList cannot be able to be.
-
OverflowError: Python 2.7 で C の long に変換するには Python の int が大きすぎる。
-
python+opencv cv2.VideoCapture は動画の取得に失敗した Solution
-
Pythonの一般的なエラーとデバッグ方法 (2)
-
未定義参照発生時のcmakeの扱いについて
-
ユニティ再生gif
-
android.intent.action.MAIN と android.intent.category.LAUNCHER を理解する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
発生: collect2 の原因の 1 つ: error: ld returned 1 exit status
-
"Undefined symbols for architecture x86_64:" エラーを解決しました。
-
undefinedエラーが発生しました:getaddrinfo ENOTFOUND; GETできません。
-
JDKをインストールすると、エラーが発生します。エラー: java.dll が見つかりません。
-
[例外処理1】ブートレイヤーの初期化でエラーが発生した
-
リソースの読み込みに失敗しました:サーバーは403(Forbidden)のステータスで応答しました。
-
Eclipse いくつかのプロジェクトは、ワークスペースにすでに存在するため、インポートできません ソリューション
-
numpy.concatenate()関数
-
lua が nil 値を呼び出そうとする。
-
モジュール 'numpy' に 'array' 属性がない問題の解決