問題タブ [mediaextractor]

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 に答える
152 参照

java - ParcelFileDescriptor を MediaExtractor setDataSource() に入れると、IOException が発生します

DatagramSocket からビデオ データを取得します。これはご存知のように byte[] であり、この byte[] を正確にデコードすることはできません。そのため、この作業を行うには MediaExtractor を使用する必要があります。ここに私のコードがあります:

コードが mExtractor.setDataSource(fd, 0, packet.getData().length); で実行されるとキャッチされます。例外は java.io.IOException: Failed to instanceiate extractor です。この問題を解決する方法が本当にわかりません....ちなみに、昨日の朝はうまくいきましたが、昨日の午後からはもううまくいきません....助けてください、どうもありがとうございます:)

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

android - Android での h.264 エレメンタリ ストリームの処理

Android で h.264 エレメンタリ ストリームをデコードする方法をしばらく理解しようとしてきましたが、決定的な答えを見つけることができませんでした。このページの例はすべて優れていますが、MediaCodec または MediaExtractor を使用してオンザフライでデコードするフレームを生成しています。

エレメンタリ ストリーム (つまり、*.264 ファイルから、またはストリーミング ソケット経由) をデコードできるソリューションを探しています。NAL ユニットとそれらの分離の基本原則は理解していますが、NAL ユニットをデコーダー/エクストラクタに供給する方法を理解しているかどうかはわかりません。

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

android - Android : MediaExtractor を使用してダウンロードしたオーディオ ファイルからオーディオ サンプルを抽出する方法

私は非常に単純な音楽アプリを作成しています。これを行う方法を見つけようとしています:

  • オーディオ ファイルをダウンロードし、ファイルをローカルに録音する
  • いつでも、ファイルからオーディオ フレームを抽出します (ダウンロード中またはダウンロード後)。

1)ダウンロード部分については、この例に従って Retrofit を使用します。簡単に言うと、ファイルをダウンロードし、ダウンロード中にローカルに記録することができます (そのため、ファイルのデータにアクセスするためにダウンロードの終了を待つ必要はありません)。

2)フレーム抽出部分については、次のように使用MediaExtractorします。MediaCodec

機能:

onAudioFileReady()呼び出されると、このコードはファイルのオーディオ サンプルを抽出して再生しますが、既にダウンロードされたもののみを再生します。すでにダウンロードされた部分の最後に到達すると、利用可能なデータがさらにある場合でもMediaExtractor停止します(extractor.advance()抽出を続行したくないようです...)。

私が達成したいこと:

もちろん、十分なデータがある限り、ファイルのオーディオ サンプルの抽出を続行できるようにしたいと考えています。

重要:

その時点で、なぜ私が単に を使用しないのかと尋ねるかもしれませんextractor.setDataSource(url)。理由は次のとおりです。

  • 後で再生できるように、オーディオ ファイルをローカルに保存したい
  • ダウンロード開始後もずっと再生できるようにしたい

誰もそれを達成する方法を知っていますか? よろしくお願いします。

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

android - オーディオ用の MediaExtractor、予期しないオーディオの取得

MediaExtractor クラスを使用して、保存された mp4 ビデオからエンコードされたオーディオ サンプル データを以下のように取得できます。

GlSurface からのビデオ ソースがあり、MediaMuxer を使用して、このビデオと前述のオーディオ抽出を多重化したいと考えています。ビデオの処理中に、ハッシュマップを使用してオーディオがマルチプレクサにインターリーブされます。ビデオとオーディオの両方を多重化し、再生可能な mp4 ビデオを作成することに成功しましたが、オーディオは元の mp4 の元のオーディオのようには聞こえません。

マルチプレクサに書き込むと、予想される bufferinfo.size と bufferInfo.presentationTimeUs が表示されます。

このhttps://gist.github.com/ams/1991ab18fbcb0fcc2cf9のように、MediaCodec で標準の inputBuffer、outputBuffer を使用しようとしましたが、これは同じオーディオを生成し、私の理解では、MediaExtractor は既にエンコードされたオーディオ データである必要があります。そのため、データを直接パイプできる必要があります。

また興味深いのは、最初に抽出するときにフラグをチェックするときです。

上記のどちらも、元の mp4 ビデオでは印刷されません。私は現在、元の mp4 ビデオと、mp4 の抽出不可能なオーディオトラックを持つことが可能かどうか、およびこれをどのように確認できるかについて質問しています。

私は、stackoverflow に関するすべての MediaExtractor の質問と、github 上の MediaExtractor の多くのシングルトン ソリューションではないにしても、ほとんどを調べたと思います。オーディオを別の方法で抽出する方法、つまり ExoPlayer を使用する方法を知っている人はいますか (Android プロジェクトに大量のオーバーヘッドが追加されるため、ffmpeg を使用しないことが望ましいです)。現在の実装にエラーがある場合は、洞察が役立ちます!

編集 1:これは、audioExtractor.getTrackFormat(trackIndex) の形式です。

{max-bitrate=512000, sample-rate=48000, track-id=2, durationUs=22373187, mime=audio/mp4a-latm, profile=2, channel-count=4, language=```, aac-profile =2、ビットレート=512000、最大入力サイズ=1764、csd-0=java.nio.HeapByteBuffer[pos=0 lim=2 cap=2]}