問題タブ [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.
android - Android メディアコーデックのクラッシュ
新しい API MediaCodec と MediaExtractor (API 16 から利用可能) を使用して、Android ビデオ プレーヤー アプリを構築しています。通常は問題なく動作しますが、非常に意味のないメッセージでクラッシュすることがあります。
誰かが何がうまくいかなかったのかをよりよく理解してくれたらいいのにと思います。クラッシュは通常、ビデオを開いて少し再生し、終了して別のビデオに移動すると発生します。非常に短い時間しか発生しませんが、非常に迷惑です。
android - MediaCodec と MediaExtractor を使用してビデオをデコードおよびコーディングする
ビデオを一連のビットマップにデコードして、それらを変更できるようにし、それらを圧縮して Android のビデオ ファイルに戻す必要があります。
getFrameAtTime
これを使用して画像シーケンスに保存することでこれを管理する予定です。次に、シーケンス内の画像を変更して、コードをムービーに戻すことができます。しかし、これには2つの問題があります:
- まず、私が読んだように、これ
getFrameAtTime
はサムネイルを作成するためのものであり、正しいフレームを返すことを保証するものではありません。これにより、ビデオが遅延します。 - 次に、画像の保存と読み込みに時間がかかります。
デコードを行う適切な方法は MediaExtractor を使用することであると読みましたが、これは問題ありませんが、直接レンダリングする例しかありませんsurfaceView
。outputBuffer
をビットマップに変換する方法はありますか?
APIレベル16以上で動作させるために必要です。
android - オーディオ ファイルのデコードと目的の PCM フォーマットへの再エンコード: 44,100 kHz、2 チャンネル、16 ビット
オーディオ ファイルを生の PCM データにデコードして、ローカル ネットワークの再生デバイスにストリーミングしたいと考えています。そのために、API レベル 16 で導入された新しいMediaExtractorクラスとMediaCodecクラスを使用します。このデバイスでは、PCM データが 44,100 kHz で、2 つのチャネルと 16 ビットのサンプル サイズが必要です。入力ファイルがこれらの要件にほぼ一致する限り、これは正常に機能します。ただし、たとえば、32,000 kHz のサンプル レートを使用し、チャネルが 1 つしかない MP3 ファイルをデコードしている場合は、MediaCodec クラスから必要な出力が得られません。
MediaCodec クラスの出力形式を指定できないようです。そこで、別の MediaCodec オブジェクトをインスタンス化して、生データを目的の形式に再エンコードすることにしました。サポートされているメディア形式のリストによると、Android は Android 4.1 以降、PCM/Wave へのエンコードをサポートしています。ただし、 PCM/Wave にエンコードする MediaCodec オブジェクトを作成できません。あらゆる種類の MIME タイプを MediaCodec.createEncoderByType(type); に渡してみました。しかし、私は常に IOException で失敗しました:
PCM/Wave にエンコードする MediaCodec インスタンスを正常に作成でき、実際の例を提供してくれる人はいますか?
android - MediaExtractor の問題
MediaExtractor
と を使用して、特定の時間に特定のフレームを映画から画像として取得しようとしていますMediaCodec
。次の場合、正常に実行できます。
- 私は を使用
extractor.seekTo(time, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
しますが、これはターゲット フレームではなく、最も近い同期フレームのみを提供します。 - を使用してすべてのフレームを順次抽出します
extractor.advance();
が、すべてではなくターゲット フレームを取得する必要があります。
だから、私は次のことを試します:
これにより正しいフレームが提供されますが、何らかの理由で画像が破損しています。それは正しい画像 (私が成功したケースから得たもの) のように見えますが、ピクセル化と奇妙なかすみがあります。
成功したケースと破損したケースで異なるのwhile-loop
は、これだけです。MediaExtractor
破損したイメージを取得せずに特定の時間 (同期時間だけでなく)に進むにはどうすればよいですか?
android - Android MediaMuxer を停止できませんでした
MediaCodec、MediaExtractor、および MediaMuxer を使用して mp4 ファイルを生成しようとしています。EveryThing は正常に動作しているようですが、MediaMuxer.stop を呼び出すとエラーが発生します。MP4 ファイルが作成されましたが、プレーヤーで再生できません。
これが私のlogcatです:
停止が失敗した理由の手がかりはありますか?