問題タブ [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.
android - csd-1 が存在しない場合、MediaMuxer が停止しない
ビデオ ファイルからビデオとオーディオ トラックをMediaExtractor
抽出し、MediaMuxer
.
抽出されたメディア形式にcsd-0とcsd-1の両方が含まれていて、変換されたビデオが正常に機能している場合、コードは正常に機能します。ただし、一部のビデオにはcsd-0のみが含まれており、これらのビデオではアプリケーションが でクラッシュしMediaMuxer.stop()
ます。
スタック トレースは次のとおりです。
android - RTMP ストリーミング用の MediaCodec エンコーダー出力バッファーの拡張クライアント所有権
バックグラウンド:
rtmp://
Android の MediaCodec を FFmpeg に接続して、コンテナー経由の出力など、MediaMuxer でサポートされていないさまざまな形式を多重化しました.flv
。このようなストリーミング マルチプレクサは、パケット処理ステップでネットワーク I/O を実行する可能性があるため、MediaCodec の出力バッファの予測不可能な長い所有権を必要とします。ビデオ ストリームには、Surface 入力用に構成された MediaCodec を使用しています。エンコーディングから多重化を分離するために、MediaCodec の ByteBuffer 出力バッファーを、Handler を介してマルチプレクサーにキューに入れます。
.flv
rtmpエンドポイントではなく、出力をファイルに多重化すると、すべてがうまく機能します。
問題:
エンドポイントに多重化すると、ストリーミング アプリケーションが への呼び出しを一度に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 のコピーをリサイクルします。これにより、割り当て数が制限されます。
android - Android MediaMuxer を停止できませんでした
MediaCodec、MediaExtractor、および MediaMuxer を使用して mp4 ファイルを生成しようとしています。EveryThing は正常に動作しているようですが、MediaMuxer.stop を呼び出すとエラーが発生します。MP4 ファイルが作成されましたが、プレーヤーで再生できません。
これが私のlogcatです:
停止が失敗した理由の手がかりはありますか?
android - ある AsyncTask から別の AsyncTask にデータを送信する方法[ビデオ システム]
オーディオ データとビデオ データを別々にキャプチャし、それらを .mp4 ファイルにエンコード/多重化しようとしています。オーディオの録音とビデオのエンコードはどちらも時間のかかる作業なので、2 つの AsyncTask を開きます。
ここに問題があります。オーディオ録音タスクのデータをビデオ エンコーディング タスクに送信する必要があります。しかし、AsynTasks 間の通信に関するものは見つかりませんでした。
誰でも私にヒントを与えることができますか?ありがとうございました!
android - MediaCodec signalEndOfInputStream() エラー
Sample Code Grafika の Live Camera Recording (With Opengl) を使用しようとしています。私のMoto Gではすべてが正常に機能しますが、他のデバイス(Cyanogendmod 11を搭載したGalaxy Tab 2)で試してみると、方法のようです:signalEndofInputStream()が機能せず、エンコーダーが停止しません。別の方法で信号を MediaCodec に送信する方法はありますか?
下手な英語でごめんなさい。
android - Androidでmediamuxerを実行する良い方法はありますか?
Androidでビデオシステムを構築しようとしています。Qualcomm から提供されたサンプルを使用しています。これにより、OpenMax を使用して、Qualcomm の顧客デバイスでハードウェア アクセラレーションを実行できます。
とにかく、このサンプルは .h264 ファイルしか生成しません。だから私は、マルチプレクサの仕事をするための良い方法を探しています。以前MediaMuxerを使用したことがありますが、android4.3以降のシステムに対応しているため、このサンプルでは動作しません。(Qualcomm サンプルは android4.2 以前のみサポート)
誰にもアイデアはありますか?ありがとうございました!
android - Android で MediaMuxer を使用してオーディオとビデオを記録する
AudioRecord
を使用してオーディオとビデオを録音しようとしていますが、Android 4.3MediaCodec
で提供されています。MediaMuxer
その結果、mp4 ファイルが破損します。これは、マルチプレクサがエンコードされたオーディオ フレームを受信しないためです。Samsung Galaxy Note 3 では 99% 動作していますが、Sony Xperia Z1 ではエンコード スレッドが常にスタックしています。理由は本当にわかりません。誰かが私のコードを最適化するのを手伝ってくれるかもしれません:
AudioRecorder.java
ご協力いただきありがとうございます。
android - [Android ソース コードの学習] IMediaRecorder.cpp はどのように Muxer の仕事をしますか?
からメディアマルチプレクサ部分を抽出したいMediaRecorder.java
。
私はAndroidのソースコードを読んでいます。バージョンはJellybean(4.2.2)です。対応するのはandroid_media_MediaRecorder.cpp
とですが、関数MediaRecoder.cpp
内のメディア マルチプレクサ プロセスの明確な定義はありませんstart()
。だから私は を読みましたIMediaRecorder.cpp
が、まだ明確な定義はありません:
今何を見ればいいのかわからない... 誰かこれについて知っていますか?? アドバイスをありがとう!