問題タブ [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 投票する
1 に答える
3968 参照

ffmpeg - コーデックがpフレームを使用する場合、av_seek_frameはavcodec_decode_video2を中断します

pフレーム(H.264など)でエンコードされたビデオを検索する方法を理解しようとしています。現在、すべてのフレームがキーフレーム(MJPEGなど)であるコーデックでエンコードされたビデオを検索する方法しかわかりません。

タイムスタンプが与えられると、最終的にはそのタイムスタンプのフレームを再生する必要があります。しかし今のところ、私はタイムスタンプの近くでキーフレームを再生しようとしています。だから、最初に-

次に、を含むいくつかの介在コードav_read_frame。それで -

観察:

  • 一部のビデオでは、これは機能します。その他の場合avcodec_decode_video2は、エラー(負の数)を返します。動作するビデオの例:ここ。動作しないビデオの例:ここ

  • MJPEGビデオの場合、これは機能します。

  • を取り出してav_seek_frame、フレームを順番に再生するようにすると、動作します。

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

c++ - 英語以外のファイル名でavio_open関数を呼び出すことは無効です

libav を使用して Unicode ベースのプログラムを作成しており、libav を介して「中.mp4」というファイル名のファイルを作成したいと考えています。

このファイル名は英語ではありません。呼び出すと、関数は正の整数を返します(失敗しません)。

ただし、「中.mp4」の代わりに「ѱ۰.mp4」があります。(無効なファイル名です。)

どうしたの?

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

c++ - ffmpeg関数avformat_seek_file()の問題

ffmpegライブラリを使用してビデオ内の特定のフレームを検索しようとしています。機能があることは知っていましたが、代わりav_seek_frame()に使うことをお勧めしましavformat_seek_file()た。ここで言及されている同様の何か。

avformat_seek_file()いつもあなたが望む正確なフレームにあなたを連れて行くことができるとは限らないことを私は知っています、しかしこれは私にとっては大丈夫です。最も近いキーフレームにジャンプしたいだけです。だから私はビデオを開き、ビデオストリームを見つけて次のように呼び出します:

常に0を返すので、正しい仕上がりだと理解しています。ただし、正常に機能しません。を呼び出す前後に、このようにバイト位置を確認しますavformat_seek_file()。実際には変化しますが、異なるターゲットフレーム番号を入力しようとすると、常に同じように変化します。つまり、この呼び出し後のバイト位置は、frameNumber値が異なっていても常に同じです。明らかに、私は何か間違ったことをしていますが、正確には何がわかりません。それが問題になるかどうかはわかりませんが、そのために.h264ファイルを使用しています。フレームの代わりにタイムスタンプを使用したり、前後のバッファをフラッシュしたりして、さまざまなフラグ、さまざまなファイルを試しましたが、うまくいきません。誰かがそれの何が悪いのか教えてくれたらとてもありがたいです。

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

c - Remux MPEG TS -> RTP MPEG ES

私のプログラム (C で書かれたもの) で次の結果を達成するために私を導いてください: HTTP MPEG TS ストリーム (コーデック h264 & aac) としてストリーム ソースがあり、1 つのビデオと 1 つのオーディオ サブストリームがあります。RTP 経由で RTSP クライアントに送信するには、(同じコーデックの) MPEG ES フレームを取得する必要があります。libavformat が RTP ヘッダー付きのフレームを提供するのが最善です。私が知っているように、Blackberry電話のメディアプレーヤーはTSを再生しないため、MPEG ESが必要です(私は試しました)。ただし、h264とaacを保持でき、ブラックベリーやその他の電話でうまく再生できる、この状況で入手しやすい別の形式を誰かが教えてくれたらありがたいです。

ストリームを開き、FLV コンテナーに再多重化する他のタスクは既に成功しています。

「rtp」形式で 2 つの出力形式コンテキストを開こうとしましたが、フレームも取得しました。クライアントに送信されます。失敗。

また、フレームを「m4v」AVFormatContextに書き込んで、フレームを取得し、NALでカットし、各フレームの前にRTPヘッダーを追加して、クライアントに送信しようとしました。クライアントが最初のフレームを表示してハングするか、10 秒以上ごとに 1 秒間のビデオとオーディオを (必要以上に速く) 再生します。VLC プレーヤーのログには次のようなものがあります: http://pastebin.com/NQ3htvFi

簡単にするために、タイムスタンプを 0 から開始するようにスケーリングしました。VLC (または覚えていない Wowza) がオーディオ TS を 1920 ではなく 1024 ずつインクリメントしたものと比較したので、他のストリーマーと同様になるように追加の線形スケーリングを行いました。bigbuckbunny_450.mp4 の再生のパケット ダンプはこちら: ftp://rtb.org.ua/tmp/output_my_bbb_450.log

ところで、どちらの場合も、Wowza または VLC から SDP をほとんどコピーしていません。

必要なものを取得する正しい方法は何ですか? libavformatに似たライブラリがあるかどうかも興味がありますか? 胚の状態でもかまいません。

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

ns2 - av_open_input_file は -2 を返しますが、ファイルは存在します (NS2 の libav)

NS2 で .wav ファイルを読み込み、gsm にエンコードしてネットワーク経由で送信するシミュレーションを作成しようとしています。私はすでに、.wav を読み取り、gsm にエンコードし、ハード ドライブに保存するアプリケーションを作成することができました (テスト済み、正常に動作します)。今、Network Simulator 2 を拡張して同じことをしようとしましたが、gsm エンコーディング アプリケーションでそのファイルに問題はありませんでしたが、常にそのようなファイルがないと言う av_open_input_file に問題があります。私が使用する呼び出し:

libavは明らかに何らかのファイルプロトコルを使用しているため、パス、絶対パス、相対パスをハードコーディングし、「file://」を前に置いて、すでに別のファイルを試しました。次に、自分でファイルを開こうとしました:

(この呼び出しは、av_open_input_file によって呼び出されることになっている libav の file.c で見つかりました) そのようなファイルを開くことに問題はありません。すべて問題ないようです。

助言がありますか?

よろしく、フロレンカ

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

ffmpeg - libav* 正しくないデコード

libav を使用して、ビデオからフレームを保存します。

問題は、decode 関数を数回呼び出すと、2 回目以降は正しく処理されないことです。

初めてそのような結論(すべて正常に動作します):

2番目(ストリームが見つかりませんが、これらは同じです):

エラーが発生した場所を教えてください。

main.cpp

ビデオ.cpp

ffmpeg -バージョン

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

c - ダイナミックリンクを介したFFmpeg(libavformat)のRTPデータ構造の使用

FFmpegのlibavformatによって提供されるRTPデータ構造(たとえば、libavformat / rtpenc.hのRTPMuxContext)を使用したいのですが、次のインストールでは使用できないようです。

/ usr / local / includeを見ると、libavformatディレクトリが表示されますが、そこにはavformat.h、avio.h、version.hのファイルしかありません。もちろん、libavformat / rtpenc.hをインクルードしようとすると、「エラー:libavformat / rtpenc.h:そのようなファイルまたはディレクトリはありません」というメッセージが表示されます。

FFmpegライブラリに動的リンクすることでこれを実現したいのですが(LGPL準拠などの理由で)、それは不可能のようです。

欠落しているconfigureスクリプトのパラメーター、または無視したインストール後の手順はありますか?

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

c - libavformat のエラー メッセージをオフにするにはどうすればよいですか

デフォルトでは、libavformat は次stderrのようなエラー メッセージを に書き込みます。

Estimating duration from bitrate, this may be inaccurate

どうすればオフにできますか?またはさらに良いことに、それを自分のきちんとしたログ機能にパイプしますか?

編集: stderr を別の場所にリダイレクトすることは、他のログ記録の目的で必要になるため受け入れられません。libavformat に書き込みを行わないようにしたいだけです。

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

android - ファイル形式を flv から Android で再生できるものに変更します

エンコードされたこのファイルはh264ですが、flvコンテナにあり、mp4、3gp、またはandroid MediaPlayerが理解できるファイル形式に入れる必要があります。

これをネイティブでやりたい。何もデコードもエンコードもしないので、多くの電力を浪費することはないと思います (間違っていますか?)

ここhttp://www.roman10.net/?p=394の指示に従い、ffmpeg を正常にコンパイルして使用し、mp4 および 3gp ファイルで使用することができました。

しかし、flv ファイルに関しては失敗します。Android用のffmpegの特定のポートには、flvファイルのフォーマット定義がないことを理解しています。

たとえば、libavformat/flv.h ヘッダー ファイルはありません。

たぶんそれがこれが機能する理由です:

extern AVInputFormat ff_mov_demuxer;
av_register_input_format(&ff_mov_demuxer);

これは失敗しますが:

質問は、トンネルの終わりに光がありますか? 誰かが似たようなことをしましたか?それは役に立ちますか?つまり、いつでも flv メディア ファイルをフラッシュ プレーヤーに放り込むだけで、できあがりです。問題は、まだフラッシュを実行できない低速のデバイスを実行しているすべての人々には機能しないため、これは部分的な解決策になるということです。 .

ネルソン

PS。念のため。私が話しているファイルに関する情報は次のとおりです。

0 投票する
3 に答える
2356 参照

libavformat - libavformat のストリーム インデックスを変更する方法

私はffmpegの初心者です。一部のメディアに複数のオーディオ ストリームがある場合に問題が発生します。MKV ファイルに 3 つのオーディオ ストリーム (MP3、WMA、WMAPro) があるとします。

次を使用してデマルチプレクサするときにストリーム インデックスを変更するにはどうすればよいですか。

そのため、change_stream_index(int streamindex) のようなものを検索しています。その関数を呼び出すと (change_stream_index(2) とします)、次に av_read_frame を呼び出すと、MP3 ではなく WMAPro フレームが demux されます。

みんなありがとう!