問題タブ [libavformat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
19347 参照

ffmpeg - DVD のタイトルとチャプター情報を取得するには?

ffmpeg を使用した DVD メニューの作成に関する多くの質問を見つけましたが、DVD 構造情報へのプログラムによるアクセスに関する質問は見つかりませんでした。libav (または FFmpeg) ライブラリを使用すると、DVD イメージ (iso ファイル) を開き、ビデオ、オーディオ、字幕ストリームにアクセスできます。しかし、私はAPIを見つけることができませんでした。

VLCプレーヤー(およびlibvlcライブラリ)を使用して、ビデオと見つかった情報を再生できます。しかし、オーディオと字幕ストリームをプログラムで処理する必要があります。SmartRipper などのツールを使用して VOB を分割し、それから処理を行いたくありません。

libav(ffmpeg) には DVD メニューを扱うための API が含まれていますか? そうでない場合、1 フレーム (サンプル、AVPacket) の精度でタイトル (チャプター) の開始時間と終了時間に関する情報を取得するために使用できる他のライブラリをお勧めできますか?

libdvdnav ライブラリについて聞いたことがありますが、それが自分に適しているかどうかはわかりません。libav と DVD 形式の内部構造は初めてです。

0 投票する
1 に答える
1500 参照

c - forループのためにffmpegsegfaultsを使用するアプリケーション?

ffmpeg.orgのドキュメントページ[チュートリアル][サンプル]からリンクされているチュートリアルを使用して、最初のffmpegアプリケーションを作成しています。これが私の最初のコードです:

そして、すべてが順調です。プログラムはエラーなしで実行され、ビデオ情報を適切にダンプします。しかし、それから私は次のステップに進みました...

そして、セグメンテーション違反で終了します。gdbによると:

呼び出された後avformat_open_inputに追加されたコードが原因でsegfaultが発生する可能性はどのようにありますか?通常のi=0でテストしました。i <100 for-loopであり、それでもsegfaultsです!これはバグですか?参考までに、私のシステムは次のとおりです。

0 投票する
4 に答える
3564 参照

c - RTSP経由でビデオとオーディオを送信する

2 種類のクライアントに接続できるサーバーを実装する必要があります。最初のタイプは、ライブ ビデオとオーディオをサーバーにストリーミングする必要があります。2 番目のタイプは、このビデオをサーバーからストリーミングする必要があります。ビデオには h.264 エンコーディング、オーディオには vorbis ogg エンコーディングを選択しました。最初のタイプのクライアントからサーバーへのビデオのストリーミングに RTSP プロトコルを使用したいと考えています。ffmpeg の「libavformat」を使用してクライアント部分を実装しました。私のコードを以下に示します。

VNetworkAbstractionLayer は次のように定義されています。

次に、サーバーを実装する必要があります。しかし、libavformat には 'listen' メソッドが見つかりませんでした。RTSPサーバーの実装方法を誰かに説明してもらえますか? 他のライブラリを使用できますか?

0 投票する
1 に答える
2135 参照

ffmpeg - avio_set_interrupt_cbの代替は何ですか?

avio_set_interrupt_cbは新しいffmpegリリースで非推奨になりましたか?代替品は何ですか?

0 投票する
1 に答える
1982 参照

audio - libav/ffmpeg で音声ファイルを適切に開く

ffmpeg を使用して、さまざまなファイル形式からオーディオ サンプルをデコードしようとしています。したがって、このディスカッションのコードに基づいていくつかの実験を開始しました: Android で FFmpeg を介してオーディオをデコードする方法。最新の FFMPEG リリース (1.0) を使用し、https://github.com/halfninja/android-ffmpeg-x264を使用してコンパイルします。

FFMPEG は enable-decoder=mp1/mp2/mp3/ogg/vorbis/wav/aac/theora を使用してコンパイルされ、外部ライブラリ (libmp3lame、libtheora など) は使用されません。

mp3 および wav ファイルを開くと、問題なく動作し、たとえば mp3 の場合、次の出力が生成されます。

オーディオ形式: mp3

音声ビットレート: 256121

ストリーム: 0 (合計: 1)

オーディオコーデック: mp3

しかし、ogg ファイルを開こうとすると、次のようになります。

ストリーム情報検索エラー: -1 (ストリーム: 1)

return ステートメントを手動で設定audioStreamIndex=0してコメントアウトすると、次のようになります。

ストリーム情報検索エラー: -1 (ストリーム: 1)

オーディオ形式: mp3

オーディオ ビットレート: 0

ストリーム: 0 (合計: 1)

オーディオコーデック: mp3

m4a (AAC) の場合、次のようになります。

オーディオ形式: mp3

音声ビットレート: 288000

ストリーム: 0 (合計: 1)

オーディオコーデック: mp1

しかし、後で失敗しavcodec_decode_audio3ます。

また、成功せずに手動でフォーマットを強制しようとしました:

mp3 と wav でのみ動作し、他の形式では失敗する読み込みコードに何か問題がありますか?

よろしく、

0 投票する
1 に答える
639 参照

visual-c++ - Windows用のlibavcodecのメモリリーク?

Windows用のlibavcodecを使用してavformat_open_input()いますが、重大なメモリリークが発生しているようです。5,000本のビデオを開くと、OSは、アプリケーションの終了時に解放されない2GBのRAMが消費されたことを報告します。コードは次のとおりです。

上記のコードは、C#から呼び出されるクラスライブラリにあります。マネージC++を使用してlibavcodecライブラリを呼び出しています。フローはC#->マネージC++->libavcodecです。DLLとダイナミックリンクを使用しています。これはシングルスレッドアプリケーションです。予想通り、スレッドを使用するとリークが増加します。

私は次のことを試しました:

  • 32ビットビルドをいくつか試しましたが、メモリリークは一貫しています。
  • NULLの代わりに使用し&dictます。
  • 同じファイル名で5,000回以上呼び出すavformat_open_input()と、メモリがリークしません。
  • 組み合わせavformat_alloc_context()とを使用しavformat_free_context()ます。メモリを解放する組み合わせが見つかりません。
0 投票する
0 に答える
288 参照

c - ffmpegに触れずに着信フレームをファイルに書き込む方法は?

av_open_input_file からフレームを読み取り、別のコーデックでデコードして再エンコードし、ファイルに保存できます。

今、私は同じことを望んでいますが、デコードまたは再エンコードしたくないことを除いて. ファイルへの読み取りフレームで av_interleaved_write_frame を実行したい。これを行うには、AVOutputFormat を設定する必要があります

AVOutputFormat *fmt; fmt = av_guess_format(NULL, ファイル名, NULL);

ただし、リモート ストリームであるため、ファイル名を指定できません。では、既に入力フレームを読み取っている現在の AVFormatContext から AVOutputFormat を生成する方法はありますか? したがって、同じフレームを出力ファイルの任意の部分から(必ずしも最初からではなく)正しい方法で書き込むことができます。

要約すると、デコードおよび再エンコードせずに、読み取ったばかりのフレームをファイルに書き込む必要があります。(そのファイルを再生できるように、もう一度そのファイルを開きます)

何か案は?

0 投票する
0 に答える
9772 参照

ffmpeg - VLC: 「avcodec エラー: ビデオが 5 秒以上遅れています」

mpeg4 ビデオを avi コンテナーに多重化しています。ビデオ ストリームは ~4fps なので、AVCodecContext time_base1/4 ( formatContext->streams[0]->codec->time_base...) に設定し、各フレームのタイムスタンプを再スケーリングします。これは、元のタイムスタンプがミリ秒単位であるためです。パケットに割り当てた結果の値ptsdts.

この avi を VLC で再生すると、ビデオが滑らかではなく、次のメッセージが繰り返し表示されます。

avcodec エラー: ビデオが 5 秒以上遅れている -> フレームがドロップしている (コンピュータが遅すぎる?)

上記のpts / dtsの計算に何か問題がありますか?

次の表は、タイムスタンプがどのように再スケーリングされるかを示しています (オリジナル -> 再スケーリング)

0 投票する
2 に答える
1562 参照

ffmpeg - オーディオ フレームは libavcodec によってどのようにデコードされますか?

これは、ffmpeg の libav* を使用してオーディオ ストリームをデコードするプロセスです。

[videofile]--> (オーディオ パケットの読み取り) --> [pkts キュー] --> (デコーダー) --> スピーカーのサンプル バッファー

何らかの理由で、デコーダーの後にバッファーを挿入する必要があります

[videofile]--> (オーディオ パケットの読み取り) --> [pkts キュー] --> (デコーダー) --> [サンプル バッファー] --> スピーカーのサンプル バッファー

のオーディオ サンプルsamples bufferは LPCM 16 ビットです。オーディオのポイントを保存するにはsample buffer、最初のサンプルのポイントを保存します。そうすれば、バッファ内の任意のサンプルのポイントを計算できます。

問題は、オーディオ ストリームに連続したオーディオ サンプルが含まれている場合にのみ計算が正しいことです。ffmpeg のデコードされたオーディオ フレームには常に連続したサンプルが含まれていますか?

0 投票する
1 に答える
7778 参照

video - 他の libav ライブラリを使用せずに libavformat を使用するにはどうすればよいですか?

ビデオを多重化するためにlibavformatのみを使用する簡単な実例が欲しいです。libavcodec でのエンコード、libavformat での多重化、libavio でのデータの保存を示す素敵な例 ( doc/examples/muxing.c ) があります。ただし、libavformat を単独で使用し、バッファ内のエンコードされたデータをフィードし、バッファ内の多重化されたデータを取得する例は私が知っているものはありません。

難しさは 2 つあります。1 つは、ストリームを追加するavformat_new_stream(AVFormatContext *s, const AVCodec *c)にはコーデックへの参照が必要です。2 つ目は、多重化からの出力が に渡されAVFormatContext->pbますAVIOContext*。したがって、libavformat を他の libav ライブラリから解放する (明白な) 方法はないようです。

参照: この質問では、libavio を使用しない方法について言及しています: Get TS packet into buffer from libavformat