問題タブ [libav]
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.
video - libav/ffmpeg: avcodec_decode_video2() は、逆多重化とデコードを分離すると -1 を返します
libav (Linux および Windows の C++ プログラムから) を使用して、ファイルからビデオ ストリームをデコードしています。
次に、逆多重化とデコードを分離する必要があります。1 つのクラスが avformat_open_input() と av_read_frame() を呼び出してから、別のクラスによって読み取られるキューに AVPackets を渡します。そこで、avcodec_alloc_context3() を使用して、avcodec_decode_video2() に必要な AVCodecContext を取得します。MPEG2 ビデオ ストリームでテストしたところ、動作しました。
H264 ストリームをデコードしようとすると問題が発生します: avcodec_decode_video2() は常に -1 を返し、「フレームなし」を出力します。このストリームをデコードするには追加のデータ (SPS/PPS) が必要であることを理解しているので、デコーダーのデマルチプレクサーから元の AVCodecContext を複製しようとしましたが、うまくいきません:
- extradata フィールドの内容をコピーし、デコーダーのデフォルト値とは異なる他のすべての値を設定する: -1 が返される
- 同じコンテキストを使用する (つまり、ポインターを渡す) と、クラッシュが発生します
CODEC_FLAG2_CHUNKS も設定してみました。avcodec_decode_video2() は常に packet.size - 3 (??) を返し、frameFinished が 1 に設定されることはありません。
私の意見では、AVPackets をデコードするために元の CodecContext からの設定が必要になるたびに発生する一般的な問題があります。その問題を解決する方法についてのヒントをいただければ幸いです。
編集:問題を書き留めておくと、問題の解決に役立つ場合があります...コンテキスト構造体 (avcodec_copy_context) のコピーを使用し、コピーを受け取った後にのみコーデックを開くと、デコードされたフレームが得られます。それが安全であるか、それを行うための最良の方法であるかを誰かが知っていますか?
windows - ffmpeg 終了ステータス -1094995529
Windows上で特定のファイルの非正統的な終了ステータスを返す呼び出しをffprobe
-1094995529
行うアプリケーションを開発しています。この終了ステータスは一貫して与えられており、これについては若干の議論があります。
なぜこの値が与えられ、どこに文書化されていますか? 許可される終了ステータスがより制限されている UNIX マシンでは、このステータスが異なると予想できますか?
ffmpeg - avio_set_interrupt_cbの代替は何ですか?
avio_set_interrupt_cbは新しいffmpegリリースで非推奨になりましたか?代替品は何ですか?
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 でのみ動作し、他の形式では失敗する読み込みコードに何か問題がありますか?
よろしく、
libav - LibAV Mpeg_TS ストリームに I フレームが含まれていないようです
YUV 420 ストリームを取得して MPEG2 に変換し、トランスポート ストリームとして UDP 経由で送信しようとしています。
変換は正しく行われているようです。出力を保存することで、再生可能な MPEG を作成できます。Wireshark で送信されたパケットを表示すると、プログラム アソシエーション、プログラム マップ テーブル (正しく表示されます)、および b フレームと p フレームを確認できます。I フレームは見えませんが、MPEG シーケンス ヘッダー パケットは見えます。
VLC を使用してストリームを表示できません (UDP://239.192.1.114:6677)
以下は、ビデオ パケットの変換と送信を示すコード スニペットです。
I フレームが表示されない理由についてのアイデアをいただければ幸いです。
visual-c++ - libav Windows 静的ライブラリ
プロジェクトで使用する libav 静的ライブラリ (.lib) を構築する方法を知っている人はいますか?
c++ - C++ としてコンパイルするが、C としてコンパイルしない場合の libav の未定義シンボル
libav ライブラリを使用して簡単なコードをコンパイルしようとしています。
私は gcc バージョン 4.2.1 の Mac を使用しています。
を使用してコードをCとしてコンパイルしようとすると
その後、コードは正常にコンパイルおよびリンクされます。ただし、使用してC++としてコンパイルしようとすると
それは私に未定義のシンボルエラーを与えます:
オプションを指定して実行すると、-v
実行されるリンク手順は次のとおりです。
ここでの唯一の違いは-lstdc++
、リンクへの追加です。
これらの未定義シンボル エラーが表示されるのはなぜですか? リンクにライブラリを追加するだけでこれらの未定義シンボルが発生する理由はありますか? または、この問題を引き起こしている何か他のものがありますか? おそらく libavformat に特に関連していますか?
c++ - H.263 でビデオをエンコードして RTP 経由で送信する
H.263 (1996) および H263+ (1998) のみを再生できるクライアントに RTP 経由でビデオを送信するアプリケーションを開発しています。
これを行うには、次の手順に従って libav を使用してビデオをエンコードしました: (これはコードの一部に過ぎません)
最終的にビデオをエンコードするループに入るには、問題は、このプログラムによって生成されたストリームがH.263-2000 (または H.263++) でエンコードされていることです。CODEC_ID_H263 またはCODEC_ID_H263P 初期化でも同じことが起こります。
libav を使用してこれらの古い H.263 バージョンでエンコードすることは可能ですか? ffmpegコマンドを使用しなくても、なんとかできませんでした。ストリームは常に h.263-2000 (PT=96) です。
c++ - libav ビデオエンコーディング ratecontrol.cpp:766
libav を使用してビデオをエンコードしようとすると、少し問題が発生します。
ratecontrol.c : 766
それを言うとアサートエラーが発生しますq>0.0
何が起こっているのかわかりませんが、文字 q は通常品質を表し、0 はロスレスであることを知っています。
しかし、この場合、私は何が間違っているのか理解できません。
これに関するコードはたくさんありますが、ここに投稿することはできません。gpl と libx264 で ffmpeg パッケージ 1.0 を使用しています。crf値が1のlibx264エンコーダーを使用してエンコードしようとしています。
入ってくる値を確認しましたが、それらは賢明なようです。指定された画像を個別の .bmp ファイルに保存しようとしましたが、すべてが順調であるようです。
編集:
了解しました。ビットレートがエンコーダーと互換性がありませんでした。
この問題を示すためにこのようなことをする必要があるのは奇妙です..
ffmpeg - オーディオ フレームは libavcodec によってどのようにデコードされますか?
これは、ffmpeg の libav* を使用してオーディオ ストリームをデコードするプロセスです。
[videofile]--> (オーディオ パケットの読み取り) --> [pkts キュー] --> (デコーダー) --> スピーカーのサンプル バッファー
何らかの理由で、デコーダーの後にバッファーを挿入する必要があります
[videofile]--> (オーディオ パケットの読み取り) --> [pkts キュー] --> (デコーダー) --> [サンプル バッファー] --> スピーカーのサンプル バッファー
のオーディオ サンプルsamples buffer
は LPCM 16 ビットです。オーディオのポイントを保存するにはsample buffer
、最初のサンプルのポイントを保存します。そうすれば、バッファ内の任意のサンプルのポイントを計算できます。
問題は、オーディオ ストリームに連続したオーディオ サンプルが含まれている場合にのみ計算が正しいことです。ffmpeg のデコードされたオーディオ フレームには常に連続したサンプルが含まれていますか?