問題タブ [mediamuxer]

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 投票する
0 に答える
1811 参照

android - csd-1 が存在しない場合、MediaMuxer が停止しない

ビデオ ファイルからビデオとオーディオ トラックをMediaExtractor抽出し、MediaMuxer.

抽出されたメディア形式にcsd-0csd-1の両方が含まれていて、変換されたビデオが正常に機能している場合、コードは正常に機能します。ただし、一部のビデオにはcsd-0のみが含まれており、これらのビデオではアプリケーションが でクラッシュしMediaMuxer.stop()ます。

スタック トレースは次のとおりです。

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

android - RTMP ストリーミング用の MediaCodec エンコーダー出力バッファーの拡張クライアント所有権

バックグラウンド:

rtmp://Android の MediaCodec を FFmpeg に接続して、コンテナー経由の出力など、MediaMuxer でサポートされていないさまざまな形式を多重化しました.flv。このようなストリーミング マルチプレクサは、パケット処理ステップでネットワーク I/O を実行する可能性があるため、MediaCodec の出力バッファの予測不可能な長い所有権を必要とします。ビデオ ストリームには、Surface 入力用に構成された MediaCodec を使用しています。エンコーディングから多重化を分離するために、MediaCodec の ByteBuffer 出力バッファーを、Handler を介してマルチプレクサーにキューに入れます。

.flvrtmpエンドポイントではなく、出力をファイルに多重化すると、すべてがうまく機能します。

問題:

エンドポイントに多重化すると、ストリーミング アプリケーションが への呼び出しを一度にrtmp://...ブロックし始めることに気付きます。MediaCodec は 4 つの出力バッファーのみにロックされているように見えるため、多重化キューにいくつかの MediaCodec 出力バッファーを保持しています。eglSwapBuffers(mEGLDisplay, mEncodingEGLSurface)dequeueOutputBuffer()

によって返されたすべてのエンコーダー出力をコピーしMediaCodec#dequeueOutputBuffersてすぐに呼び出すことを避けるためのトリックはありreleaseOutputBuffer(...)ますか?

私のプロジェクトの完全なソースはGithubで入手できます。具体的には、次を参照してください。

  • AndroidEncoder.java : オーディオ エンコーダーとビデオ エンコーダーの間で動作を共有する抽象エンコーダー クラス: 主に、drainEncoder()。インスタンスにデータを書き込みMuxerます。
  • FFmpegMuxer.java : 実装Muxer
  • CameraEncoder.java . ビデオ エンコーディング用に構成された AndroidEncoder サブクラスにカメラ フレームを送信します。

シストレース

シストレース出力

これは、720p @ 2Mbps のビデオを Zencoder にストリーミングする systrace 出力です。

解決済み

MediaCodec エンコーダーの出力 ByteBuffers が利用可能になったらすぐにコピーして解放することで、パフォーマンスに大きな影響を与えることなく問題を解決できます。ArrayDeque<ByteBuffer>各マルチプレクサ トラックでByteBuffer のコピーをリサイクルします。これにより、割り当て数が制限されます。

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

android - Android MediaMuxer を停止できませんでした

MediaCodec、MediaExtractor、および MediaMuxer を使用して mp4 ファイルを生成しようとしています。EveryThing は正常に動作しているようですが、MediaMuxer.stop を呼び出すとエラーが発生します。MP4 ファイルが作成されましたが、プレーヤーで再生できません。

これが私のlogcatです:

停止が失敗した理由の手がかりはありますか?

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

android - ある AsyncTask から別の AsyncTask にデータを送信する方法[ビデオ システム]

オーディオ データとビデオ データを別々にキャプチャし、それらを .mp4 ファイルにエンコード/多重化しようとしています。オーディオの録音とビデオのエンコードはどちらも時間のかかる作業なので、2 つの AsyncTask を開きます。

ここに問題があります。オーディオ録音タスクのデータをビデオ エンコーディング タスクに送信する必要があります。しかし、AsynTasks 間の通信に関するものは見つかりませんでした。

誰でも私にヒントを与えることができますか?ありがとうございました!

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

android - MediaCodec signalEndOfInputStream() エラー

Sample Code Grafika の Live Camera Recording (With Opengl) を使用しようとしています。私のMoto Gではすべてが正常に機能しますが、他のデバイス(Cyanogendmod 11を搭載したGalaxy Tab 2)で試してみると、方法のようです:signalEndofInputStream()が機能せず、エンコーダーが停止しません。別の方法で信号を MediaCodec に送信する方法はありますか?

下手な英語でごめんなさい。

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

android - Androidでmediamuxerを実行する良い方法はありますか?

Androidでビデオシステムを構築しようとしています。Qualcomm から提供されたサンプルを使用しています。これにより、OpenMax を使用して、Qualcomm の顧客デバイスでハードウェア アクセラレーションを実行できます。

とにかく、このサンプルは .h264 ファイルしか生成しません。だから私は、マルチプレクサの仕事をするための良い方法を探しています。以前MediaMuxerを使用したことがありますが、android4.3以降のシステムに対応しているため、このサンプルでは動作しません。(Qualcomm サンプルは android4.2 以前のみサポート)

誰にもアイデアはありますか?ありがとうございました!

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

android - Android で MediaMuxer を使用してオーディオとビデオを記録する

AudioRecordを使用してオーディオとビデオを録音しようとしていますが、Android 4.3MediaCodecで提供されています。MediaMuxerその結果、mp4 ファイルが破損します。これは、マルチプレクサがエンコードされたオーディオ フレームを受信しないためです。Samsung Galaxy Note 3 では 99% 動作していますが、Sony Xperia Z1 ではエンコード スレッドが常にスタックしています。理由は本当にわかりません。誰かが私のコードを最適化するのを手伝ってくれるかもしれません:

AudioRecorder.java

ご協力いただきありがとうございます。

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

android - [Android ソース コードの学習] IMediaRecorder.cpp はどのように Muxer の仕事をしますか?

からメディアマルチプレクサ部分を抽出したいMediaRecorder.java

私はAndroidのソースコードを読んでいます。バージョンはJellybean(4.2.2)です。対応するのはandroid_media_MediaRecorder.cppとですが、関数MediaRecoder.cpp内のメディア マルチプレクサ プロセスの明確な定義はありませんstart()。だから私は を読みましたIMediaRecorder.cppが、まだ明確な定義はありません:

今何を見ればいいのかわからない... 誰かこれについて知っていますか?? アドバイスをありがとう!