問題タブ [libx264]
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 - FFmpeg H.264 デコーダーの調整
私はFFmpegavcodec
を使用してライブビデオをデコードしています-avcodec_decode_video2
正確にはlibx264の機能です。各フレームのデコード時間を短縮するにはどうすればよいですか? 現時点では、各フレームに 20 ミリ秒かかります (フレーム サイズは約1.5 KB
)。
c++ - x264 ストリームと ogg vorbis ストリームがある場合、mplayer/VLC が読み取れる多重化ストリームを作成するにはどうすればよいですか?
私は混乱していて、この質問に少し行き詰まっています。Googleで見つけることができるのは、質問とは関係のないトランスコーディングソフトウェアの基本的な使用法だけです。
私はゲームを作成しており、ビデオをストリーミングするためのネイティブ キャプチャ機能を含めたいと考えています。これを VLC などの標準的なクライアントにストリーミングしたいと思います。これを機能させるには、認識できる形式である必要があり、多重化する必要があります。
したがって、私の質問は、生のビデオ フレームから x264 にエンコードする方法を知っていることです ( x264 C API を使用して一連の画像を H264 にエンコードする方法も参照してください)。生のオーディオ サンプルを ogg/vorbis にエンコードする方法を知っています。では、VLC 用に 1 対 1 を組み合わせるにはどうすればよいでしょうか。
c++ - libavformat を使用した RTP 経由の H.264 ストリーミング
先週、RTP 経由で H.264 ストリーミングを実装しようと試みました。x264 をエンコーダとして使用し、libavformat を使用してストリームをパックして送信しました。問題は、私が知る限り、正しく機能していないことです。
現在、ランダム データ (x264_picture_alloc) をエンコードし、libx264 から NAL フレームを抽出しています。これはかなり単純です。
nal_queue
フレームを安全に Streamer クラスに渡し、フレームを送信するために使用されます。これを機能させるためにテストしているだけなので、現在はスレッド化されていません。個々のフレームをエンコードする前に、エンコーダーを確実に初期化しました。
しかし、x264 が問題であるとは思いません。返される NAL でフレーム データを確認できるからです。データのストリーミングは、Streamer クラスで最初に初期化される libavformat で実現されます。
これは、物事がうまくいかないように見えるところです。av_write_header
上記はまったく何もしないようです。これを確認するためにwiresharkを使用しました。参考までに、以前に x264 を処理するために使用されたオブジェクトへの参照を使用Streamer streamer(&enc, "10.89.6.3", 49990, 800, 600, 30, 40000);
して、Streamer インスタンスを初期化します。enc
Encoder
NALをストリーミングしたいときは、これを使用します:
この時点で、RTP データがネットワーク上に表示されていることがわかります。これまで送信してきたフレームのように見えます。x264 からの小さな著作権の塊も含まれています。しかし、私が使用したプレーヤーは、データの意味を理解できませんでした. VLC は SDP の説明を必要としなくなりますが、これは明らかに必須ではありません。
私はそれからそれを再生しようとしましたgst-launch
:
gst-launch udpsrc port=49990 ! rtph264depay ! decodebin ! xvimagesink
これはUDPデータを待っていますが、受信すると次のようになります:
エラー: 要素 /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0: RTP 形式がネゴシエートされませんでした。追加のデバッグ情報: gstbasertpdepayload.c(372): gst_base_rtp_depayload_chain (): /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0: 入力バッファーには RTP キャップを設定する必要があります。これは通常、上流のソース要素 (多くの場合、udpsrc または appsrc) の「caps」プロパティを設定するか、depayloader の前に capsfilter 要素を配置して「caps」プロパティを設定することによって実現されます。http://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/gst/rtp/READMEも参照して ください。
私は GStreamer を使用してストリーミングしていないので、RTP キャップでそれが何を意味するのかよくわかりません。しかし、RTP でストリームを説明するのに十分な情報を送信していないのではないかと思います。私はビデオにかなり慣れていないので、ここで欠けている重要なものがあるように感じます. ヒントはありますか?
flash - FlashMediaServerおよびHDSでのffmpegの使用
ffmpegを使用して、ライブストリームをエンコードしてFlashMediaServerに公開したいと思います。iOSデバイスをサポートするには、HTTPライブストリーミングも実装する必要があります。ビデオはH.264形式である必要があり、オーディオはAACである必要があります。私はffmpegを使った経験があまりなく、これを機能させるのに苦労しています。これは私が試したコマンドです(そしていくつかのバリエーションもあります):
これを実行すると、FMSに接続しているように見えますが、ドロップされたフレームに関する多くのエラーメッセージが表示されます。フレームが正常にエンコードされているかどうかはわかりません。私のCPU使用率も非常に高いです。個々のストリームの1つに*.m3u8ファイルのURLを入力すると、FMSから404エラーが発生します(ただし、メインのlivestream.m3u8ファイルにはアクセスできます)。また、FMSの代わりにファイルに出力しようとしましたが、成功しませんでした。私が得るのは、非常に文字化けした音だけで、ビデオはありません。
これを機能させるために使用する必要があるオプション/コマンドに関する提案はありますか?FMSでffmpegを使用してMP4ビデオでHTTPダイナミックストリーミング/HLSを実行している人はいますか?私はしばらくの間HDS/HLSを機能させるのに苦労してきました、そしてどんな助けでも大いに感謝されます!違いはないはずですが、私はAmazonEC2でAMIイメージを使用してFMSを使用しています。
ありがとう!
dll - cygwin1.dll なしの Libx264?
MinGW と Msys で libx264-125.dll をビルドしました。ただし、libx254-125.dll を実行するには、cygwin1.dll と cyggcc_s-1.dll を呼び出す必要があります。静的な libx264-125.dll をビルドする方法を教えてください。ご協力ありがとうございます。
ffmpeg - ffmpeg 構文が変更されました
この投稿で話したことと同じように: FFmpeg は、Ubuntu 12.04 が存在するにもかかわらず、プリセットを認識できません。
長い間ffmpegから減価償却されてきたdeblockalphaを使用して、私はこのすべてのコーディングビジネスに慣れていませんが、このエラーが発生しているため、この古い構文を修正する方法を誰かに教えてもらいたいです:
認識できないオプション 'deblockalpha' オプション 'deblockalpha' の値 '0' を設定できませんでした
以下のコードを見てアドバイスしてください。
ありがとう
android - Android での GStreamer x264enc および SIGSEGV
私は GStreamer-java をいじろうとしていますが、これは Android の h.264 エンコーダー (x264enc) です。
ここで、テスト ビデオ ソースから未加工のビデオをエンコードしようとしました (そのis-liveプロパティをTRUEに設定)。データが x264enc 要素に流れ始めると、libx264.so で SIGSEGV が取得され、アプリがクラッシュします。そして、コードが NULL を逆参照しているように見えます...正確なエラーの場所は、ファイル「gstreamer_ndk_bundle/x264/encoder/analyse.c」の 963 行目です。そして、この行です。
私のデバイスの CPU は Cortex 8 で、NEON 機能を備えています...
すべての構造体フィールドをファイルに出力しようとしましたh
が、初期化されていないフィールドはありません。
LogCat からの Android DEBUG 情報: HERE
私の質問:
- このコード行は問題ないように見えるので、SIGSEGV をスローしているものをどのように知ることができますか?
- これは既知のバグですか、または ARM CPU 上の x264 エンコーダーの予想される動作ですか? または、エンコーダーの構成が不足していますか?
- エンコーダーのプロパティ分析を0x3:0x113 (オンラインで見つけたランダムな値) に設定すると、SIGSEGV が取得されず、エンコーダーが動作しているように見えますが、パイプラインでエラーが発生することに気付きました: Data flow error。分析を意味のある値に設定することはできますか?
アップデート
x264_mb_analyse_intra() 関数で実行が実行される直前、およびそれが壊れる行の直前に、すべての重要な「h」フィールドを fprintf-ed しました 。
callback - 「nalu_process」がいつ呼び出されるかについて、保証があるとすれば、それは何ですか?
特に、関連付けられたx264_encoder_encode
すべてのコールバックが返される前に呼び出しを返すことはできますか? nalu_process
#x264 の誰かが、設定に依存することを提案しました。ここでは、「ゼロレイテンシー」プリセットについて話しています。
上記の質問に対する答えが「はい」の場合、経験的にどれくらい一般的ですか?
video-encoding - mbtree オプションを使用した libx264 2 パス エンコーディング、最初のパスが失敗する
libx264 を使用するアプリケーションに取り組んでいます。2 パス エンコードを行う場合、mbtree オプションが有効になっていると、最初のパスは統計ファイルに何も入れないようです。
2 回目のパスで x264_encoder_open() を実行すると、失敗メッセージが表示されます。
そのため、最初のパスで失敗しているようです。mbtree をオフにすると、2pass は正常に動作します。mbtree がオフになっている限り、プリセットまたは調整パラメーターを使用して実行できます。最初のパスで mbtree が失敗する可能性のあるパラメーター (上記のリストを参照) はどれですか?
libavcodec - sws_scale の代替
libavcodecを使って、キャプチャーしたwindows画面をx264でエンコードしています。入力はRGBなので、x264に対応するためにYUVに変換しています。同じために sws_scale 関数を使用しています。私の質問は、私の場合はスケーリングを行う必要がないため、この機能に代わるものがあるかどうかです。また、誰かがこの機能のワークフローに光を当ててくれると助かります。
PS: x264 は YUV 色空間でのみ動作すると想定しています。この仮定が間違っている場合は、同じことをお知らせください。
前もって感謝します。