問題タブ [muxer]
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.
android - Android エンコーダー マルチプレクサー: 生の h264 から mp4 コンテナーへ
h264 raw ビデオ ファイルを作成し、Android 4.3 以降で Android MediaMuxer を使用して多重化することができました。ここで、Android バージョン 4.1 および 4.2 をサポートする必要があります。Jコーデックを見つけました。そして、これを行う例があります:
https://github.com/jcodec/jcodec/blob/master/samples/main/java/org/jcodec/samples/mux/AVCMP4Mux.java
しかし、70 行目で java.nio.ReadOnlyBufferException 例外が発生しています。
H264Utils.encodeMOVPacket(データ);
このコードは Android 用ではないと思いますか? これを修正するにはどうすればよいですか。Jcodec に詳しい人がこれを手伝ってくれますか?
android - FFMpeg の Muxer 部分を抽出する方法
ビデオをキャプチャしてh264ファイルに圧縮するQUALCOMMのサンプルに基づいてエンコーダーを作成しました。Android 4.2.2 を使用しています。今、私はこのファイルを mp4 (ビデオのみ、オーディオなし) に多重化したいと考えています。
FFMpegがその仕事をすることができると聞きました。しかし、例を読んだ後、マルチプレクサが FFMpeg のエンコーダを使用していることがわかりました。別のエンコーダーでマルチプレクサー部分を使用する方法がわかりません。
誰でも私にヒントを与えることができますか?ありがとうございました!
gstreamer - rtspsrc からオーディオとビデオを分離し、matroska mux を使用してファイルに保存する方法は?
私は、rtspsrc を使用して、あるネットワーク カメラから別のネットワーク カメラにオーディオとビデオを収集するアプリケーションに取り組んできました。ただし、カメラからストリームを見ることができないため、ストリームが意図したとおりに機能することを確認できません。ストリームが正しいことを確認するために、SD カードに記録してから、コンピューターでファイルを再生したいと考えています。問題は、アプリケーションの目的であるため、カメラにできるだけ多くの解析、デコード、デペイロードを実行させたいことです。
そのため、オーディオ ストリームとビデオ ストリームをデマルチプレクサで分離し、解析、デコードなどを行ってから、それらを mux して matroska ファイルに戻す必要があります。
ビデオデコーダーは、このカメラではまだ行われていないため省略されています。
ライブ再生シンクへの Demux (動作)
matroska への複数の rtspsrc (動作)
matroska への単一の rtspsrc (失敗)
最後の例はエラー メッセージで失敗します
matroska mux の使用法を誤解していますか? 上記の 2 つの例は機能するのに、最後の例は機能しないのはなぜですか?
ios - VTCompressionSession からの圧縮フレームとオーディオ データをネットワーク ストリーミング用の MPEG2-TS コンテナーに多重化する
私は、iOS8 の VTCompressionSession から H.264 でエンコードされたフレームを取得し、マイクからのライブ AAC または PCM オーディオを使用してそれらを再生可能な MPEG2-TS に多重化し、最小の遅延でリアルタイムでソケットを介してストリーミングするプロジェクトに取り組んでいます (すなわち: (ほとんど) バッファリングなし)。
iOS8 の新しい VideoToolbox のプレゼンテーションを見て、いくつかの調査を行った後、次のことを想定しても安全だと思います。
VTCompressionSession から取得したエンコードされたフレームは Annex B 形式ではないため、何らかの方法で変換する必要があります (これまでに見た説明はすべてあいまいすぎるため、どのようにこれを行うのかよくわかりません (つまり、 : 「3 または 4 バイトのヘッダーを長さヘッダーに置き換えます」))。
VTCompressionSession から取得するエンコードされたフレームは、実際にはエレメンタリ ストリームです。そのため、最初にそれらを多重化する前にパケット化されたエレメンタリ ストリームに変換する必要があります。
マイク データからの AAC または PCM エレメンタリ ストリームも必要です (エンコーディングが含まれていないため、PCM の方が簡単だと思います)。私もやり方がわかりません。
パケット化されたエレメンタリ ストリームを多重化するには、libmpegts などのライブラリも必要です。または、おそらく ffmpeg (libavcodec および libavformat ライブラリを使用)。
私はこれにかなり慣れていません。これを達成するための正しいアプローチについてアドバイスをいただけますか?
Apple API (AVFoundation など) を使用してこれを実装する簡単な方法はありますか?
参考にすることができる同様のプロジェクトはありますか?
前もって感謝します!
android - エンコーダーの動作中に新しいビデオ ファイルのマルチプレクサを再作成する
私は BigFlake の CameraToMpegTest を使用していますが、エンコーダーの動作中に何度もマルチプレクサの開始と停止を有効にするように変更しています。ビデオ録画がそうでない場合でも、エンコーダーを使用してテクスチャからフレームを取得し、他の処理を行います。
最初の始動/停止では問題なく動作しますが、2 回目の始動/停止には問題があります。例外が発生してアプリを閉じます:「stop() が無効な状態 3 で呼び出されました」、「...原因: java.lang.IllegalStateException: マルチプレクサーの停止に失敗しました...」。また、2 番目のビデオ ファイルは開きませんが、空ではありません。
エンコーダを継続的に実行している間にマルチプレクサを再起動する可能性はありますか? 私は何を間違っていますか?
更新:キーフレームでその問題を見つけました。format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 0) を設定すると、すべて問題ありません。では、マルチプレクサが再び記録を開始するときにキーフレームを要求する方法は?
マルチプレクサのクラス:
audio - FFMPEG - RTMP から HLS への音声出力なし
私は現在、ライブカメラ アプリケーション用の動的 HLS セグメンターを開発しています。そのため、外部 RTMP ストリームをキャッチし、ffmpeg でセグメントに変換します。
次のコマンドが機能します。
しかし、このコマンドを使用すると、ライブストリームと HLS 出力の間に大きな遅延が発生します (約 1 ~ 2 分!)。
そこで別のコマンドを試してみたところ、20 ~ 30 秒の遅延が発生しました。私の唯一の問題は、オーディオ ストリームが認識されず、HLS ファイルにも配置されないことです (つまり、ビデオしか取得できず、オーディオはまったく取得されません)。
-c:a aac フラグは、オーディオの多重化にも機能するはずだと思いました。
2番目のコマンドで何がうまくいかなかったのか、何か提案はありますか? オーディオ ストリームも確実にセグメント化する必要があります。
前もって感謝します
アップデート:
FFMPEG コマンドのいくつかの出力:
コマンド (2) を開始し、オーディオ出力を取得しましたが、毎回動作しないようです。
動作中のコマンド 2 からの出力、音声が動作中: http://pastebin.com/bhxfNQBg
動作中のコマンド 2 からの出力、オーディオが動作していない (何も変更されていない): http://pastebin.com/engEuSdn
私にとって奇妙なのは、次の行です。
これは、hls 側のオーディオが機能していない場合にのみ発生します。
どんな助けでも大歓迎です
更新 2:
ストリームが公開された後に ffmpeg コマンドを開始すると問題が発生するようです。
1. ストリームを開始します (AMS への nc 接続が確立されます) 2.
FFMPEG
コマンドを開始します (ストリームがパブリッシュされるまでアイドル状態になります)
3. パブリッシュを開始します
1. ストリームを開始します
2. ユーザーが参加し、公開を開始し
ます 3. ffmpeg コマンドをトリガーします
video - FFMpeg muxing h264 から mp4 結果ファイルへの多重化が実行されていません
最新のFFMPEG 3.0を使用して、h264ファイルをmp4に多重化するコードを書いています。多重化は機能していますが、結果の mp4 ファイルに vedio が表示されません。結果の mp4 ファイルを再生すると、時間だけが実行されます。これを解決するのを手伝ってください。私が欠けているものを教えてください。これが私のコードです:
ffmpeg - ffmpeg エラー: データが RTP パケットのように見えません。RTP マルチプレクサが使用されていることを確認してください
usbcam&mic から両方のビデオとオーディオをストリーミングしようとしています。ffserver で ffmpeg をスローします。2 つのエラーが発生
しました。静的ファイル
ここにserver.confファイルがあります:
私のffmpegコマンドは
動作しているようですが、このエラーが表示されます:
「データが RTP パケットのように見えません。RTP マルチプレクサが使用されていることを確認してください」
静的ファイルをストリーミングすると動作しますが、usbcam ストリームを再生しようとすると ffplay がスローされ、vlc は何も動作しません
前もって感謝します、
android - MediaCodecMuxer でのビデオのエンコードが遅すぎる
動画のエンコードに MediaCodec Muxer を使用していますが、処理が遅すぎます。60 秒のビデオの場合、エンコード処理に 90 秒以上かかることがあります。エンコード プランは ExtractDecodeEditEncodeMuxTest(BigFlake) から取得され、この例を jni レイヤーに解釈します。コードでリフレクションを使用して Java API を呼び出すため、ビデオのエンコードが非常に遅くなるためなのか、GLDisplay と MediaCodec inputSurface 間のスワップ プロセスがこの問題を引き起こすのか、私にはわかりません。eglCreateWindowSurface を使用して GLSurface を作成していますが、eglCreatePbufferSurface を使用してオフスクリーン サーフェスを作成し、エンコード プロセスを高速化できるかどうか疑問に思っています。誰でもアドバイスできますか?ありがとう!