問題タブ [avcodec]
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.
ffmpeg - デコードされた H.264 では、フレームとコンテキストのサイズが異なります
H.264 をデコードするために avcodec を使用しています。状況によっては、解像度を変更した後、avcodec が混乱し、デコードされたフレームに 2 つの異なるサイズが表示されます。
これにより、次のログが生成されます (周囲にいくつかの行があります)。
これが途切れる行は でマークされてい*
ます。pAVFrame
には古いフレームの寸法がpCodecCtx
含まれていますが、新しい寸法が含まれています。描画コードが 1280x800 の画像としてデータにアクセスしようとすると、アクセス違反が発生します。
サイズを下げると、avcodec は正しく遷移し、FrameFinished
0 に設定され、pAVFrame
解像度は 0x0 のままになります。
これを引き起こしている原因、なぜ avcodec が成功を報告しているのに何もしていないのか、これを正しく解決するために何ができるのか、誰でも考えられますか?
今のところ、不一致チェックがこれを防いでいます。
使用中の avcodec は、Zeranoe によって git-5cba529 から構築されています。
opengl - AVFrame.dataを埋める最良の方法は何ですか
opengl フレームバッファ データを AVCodec にできるだけ速く転送したい。
私はすでにシェーダーでRGBをYUVに変換し、glReadPixelsでそれを読んでいます
AVFrame データを手動で入力する必要があります。もっと良い方法はありますか?
c++ - FFmpeg オーディオ エンコーダーの新しいエンコード機能
既存のエンコーダーの構造を変更せずに、関数avcodec_encode_audio (deprecated)
を使用して AV オーディオ エンコーダーを に更新したいと思います。avcodec_encode_audio2
どこ:
1) m_handle AVCodecContext
2) dst, uint8_t * 宛先バッファ
3) sizeBytes, uint32_t 宛先バッファのサイズ
4) m_samBuf void * エンコードするデータの入力チャンクへ (これは次のようにキャストされます: const short int*)
それを行う簡単な方法はありますか?
私は試しています:
コンパイルはしますが、何もエンコードしません。アップグレード前に警告していた mplayer で出力ストリームをパイプ処理する場合、ここではオーディオを出力しません。
私は何を間違っていますか?
エンコーダーは、次の 2 つのサンプル形式のみを受け入れます。
バッファの割り当て方法は次のとおりです。
ffmpeg - Quick Sync h264_qsv エンコーダーの使用時に ffmpeg avcodec_encode_video2 がハングする
mpeg4 または h264 エンコーダーを使用すると、ffmpeg 3.1.0 の API を使用して画像を正常にエンコードし、有効な AVI ファイルを作成できます。ただし、Quick Sync エンコーダー (h264_qsv) を使用すると、avcodec_encode_video2 がハングすることがあります。1920x1080 の画像を使用すると、avcodec_encode_video2 がハングすることがまれにあることがわかりました。256x256 の画像を使用すると、関数がハングする可能性が非常に高くなりました。
avcodec_encode_video2 のハングを示す以下のテスト コードを作成しました。このコードは、1000 フレーム、ビット レート 400000 の 256x256 AVI を作成します。フレームは単純に割り当てられるため、出力ビデオは緑色のフレームだけになります。
この問題は、32 ビットまたは 64 ビットのテスト アプリケーションを使用して、Windows 7 および Windows 10 を使用して確認されました。
avcodec_encode_video2 のハングを回避する方法を知っている人がいれば、非常に感謝しています。ご協力いただきありがとうございます。
c++ - リアルタイム ビデオ ストリームの GOP サイズ
私は、avcodec/x264 を使用してエンコードされたデスクトップのビデオ ストリームを使用して、一種のリッチ リモート デスクトップ システムに取り組んでいます。ストリームの GOP サイズを手動で設定する必要があり、これまでは fps/2 のサイズを使用していました。しかし、ウィキペディアで次のことを読んだところです。
この構造 [Group Of Picture@] は、2 番目と 3 番目のフレーム (B フレーム) を予測するために 4 番目のフレーム (P フレーム) が必要であるため、問題を示唆しています。そのため、B フレームの前に P フレームを送信する必要があり、送信が遅延します (P フレームを保持する必要があります)。
これは、I フレームに続く最初のフレームを出力するために、クライアントが GOP の少なくとも半分を受信する必要があるため、多くのレイテンシが発生していることを意味します。可能な限り最小のレイテンシーが必要な場合、GOP サイズの最適な戦略は何ですか? 1枚の写真のゴップ?
c++ - 生の PCM から u-law にエンコードするように AVCodecContext 構造を構成する
生の PCM オーディオ データを u-law にエンコードしようとしていますが、非常に奇妙に聞こえます (聞こえると...)。AVCodecContext
構造体 (および入力)を初期化する方法がよくわかりませんAVFrame
。
ここに私のパラメータがあります:
入力 : PCM (16bits signed), MONO, 44,1kHz (サンプルレート) (Android デバイスの MIC から)
必要な出力 : G.711 u-law、MONO、8kHz (サンプル レート)、64 kbits/s (ビットレート) (私の出力ターゲット デバイスのドキュメントから)
入力 nb サンプルも知っています。これが私が持っているすべての情報です。
だから私はAVCodecContext
そのように初期化します:
そして私AVFrame
のような:
次に、 と でエンコードしavcodec_send_frame()
ますavcodec_receive_packet()
。
したがって、私の問題は、入力または出力の目的の値を異なるパラメーターに入れる必要があるかどうかわからないことです。おそらく、途中でエンコードしてから、swresample
lib を使用して「リサンプリング」する必要があります。しかし、今のところ、適切にエンコードされていないことは確かです。アドバイスをお願いします。ありがとう!
c# - C# で A/V ストリームをデコードする
私は、オーディオ/ビデオ ストリームを読み取ることができ、それをビデオ ファイルとオーディオ ファイルに分離する必要がある C# プログラムに取り組んでいます。入力ストリームは Byte-Raw 配列です私の質問は、Video フレームと Audio フレームを Byte 配列から分離するにはどうすればよいですか? (そのストリーミングに関するビデオとオーディオの詳細を知っていると仮定します)
PS: 私の悪い日本語でごめんなさい :'(
c++ - Visual Studio 2017 C++ プロジェクトでの Libavcodec "av_frame_alloc のプロシージャ エントリ ポイントが見つかりませんでした" エラー
Visual Studio 2017 Community で C++ の ffmpeg ライブラリの libavcodec を使用しようとしています。最新の x64 dev と共有ビルドを zeranoe (バージョン 20171217) からダウンロードし、Visual Studio で x64 ビルド用のインクルード ディレクトリと追加ライブラリをセットアップし、共有パッケージから DLL ファイルを PATH に追加しました。
これは私のサンプルテストコードです:
コードは問題なくコンパイルされますが、アプリケーションを実行すると、ダイアログ ウィンドウに「av_frame_alloc のプロシージャ エントリ ポイントが DLL に見つかりませんでした」というエラー メッセージが表示されます (実際のメッセージは英語ではなく、翻訳されたバージョンです)。
同様の質問でアドバイスされているように、Linker->Optimization->References を /OPT:NOREF に設定しようとしましたが、役に立ちませんでした。
依存関係ウォーカーは、av_frame_alloc がエクスポートされ、「エントリ ポイント」がバインドされていないことを示しています。av_frame_alloc が avcodec-58.dll (赤色) と avutil-56.dll (緑色) の両方に表示されるのは少し奇妙です。アプリケーションが avutil ではなく avcodec からこの関数を取得しようとしていることが原因かもしれませんが、これらのライブラリのソース コードを確認していないため、わかりません。
問題は、VS2017 でこのような単純な FFMPEG ベースの C++ プロジェクトをセットアップする方法です。どこが間違っていますか?
アップデート。1.
リンカー フラグ: /OUT:"C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.exe" /MANIFEST /NXCOMPAT /PDB:"C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.pdb" / DYNAMICBASE "c:\work\dev\ffmpeg-20171217-387ee1d-win64-dev\lib*.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" " advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG:FULL /MACHINE:X64 /OPT:NOREF /PGD:" C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Release\TestFfmpeg.exe.intermediate.manifest" /OPT :ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1