問題タブ [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 投票する
8 に答える
10658 参照

android - MediaMuxer ビデオ ファイル サイズの縮小 (再圧縮、解像度の低下)

ビデオの重量を(アップロード用に)減らす効率的な方法を探していFileますが、それに対する明らかな答えは、解像度を下げましょう!(fullHDまたは4Kは必要ありません。シンプルなHDで十分です)多くのAPI(10が必要)で機能する多くの方法を試しましたが、最良の方法はandroid-ffmpeg-javaを使用することでしたが...ほぼ最新のフラグシップ デバイス全体のプロセスが高速で、およそ length_of_video*4 秒かかります。また、この lib の重量は 9 Mb です。この量により、アプリのサイズが増加します...いやいや! (12 Mb から 1 Mb は良い結果ですが、それでもまだ欠陥が多すぎます)

そのため、これを行うためにネイティブの Android の方法を使用することにしました。MediaMuxerまた、MediaCodecそれぞれ API18 と API16 から利用できます (古いデバイスのユーザー: 申し訳ありませんが、「低解像度」のカメラを使用していることがよくあります)。以下の方法はほとんど機能します -尊重しMediaMuxerないでください- 抽出されたものは「再圧縮」され、重量は少し小さくなりますが、解像度は元のビデオと同じです...MediaFormat.KEY_WIDTHMediaFormat.KEY_HEIGHTFileFile

それで、質問:ビデオの解像度を圧縮して再スケーリング/変更するMediaMuxer方法と、その他の付随するクラスとメソッドを使用するにはどうすればよいですか?

PS。マルチプレクサに関する多くの有用な情報がここにあり、上記のコードベースMediaMuxerTest.javaはメソッドに基づいていますcloneMediaUsingMuxer

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

android - Android MediaCodec: eglSwapBuffers: EGL エラー: 0x300d

そのため、問題は 2 回目の録音を試みたときにのみ発生します。つまり、MediaCodecs と Muxer を初めて実行すると、ほとんどの場合すべてが機能します。しかし、今はアプリをもっと安定させたいと思っています。

取り壊されていないものを見つけ出し、正しくセットアップするのに役立ちます。

基本的に2回目の実行では、すべてが正常にセットアップされますが、「Renderer.drawFrame」が呼び出さGLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);れるとエラーが発生します:I/Adreno﹕ Native window GetBuffer failed

が呼び出されたときGLES20.glFlush();のエラーは次のとおりです。I/Adreno﹕ Failed to acquire a surface

eglSwapBuffers: EGL error: 0x300dバッファを交換しようとすると、常にこれが先行します。そのため、最初の実行から何かがクリーンアップされていません。

クリーンアップ コード:

MyMediaCodec.stop()

MyMediaMuxer.stop()

mEGLWrapper.destroySurface();

エラーログ

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

android - Android で EncodeAndMux と HelloEffects を組み合わせる

MediaCodec と MediaMuxer を使用して、一連の画像でビデオを作成しようとしています。エンコーディングの前に、各ビットマップにエフェクトも適用したいと思います。

ビデオは正しい長さで作成されますが、出力は黒い画面のみです。

私は、 bigflake.com でEncodeAndMuxの例を見てきました ( を変更し、generateFrame()作成時に共有コンテキストを追加しましたCodecInputSurface) 。

および Google の HelloEffects を使用して EffectFactory をセットアップします。

私のアイデアは、2 つの EGLContexts を作成することでした。

私は OpenGl と Android を初めて使用するので、間違った方法で行っているかどうか教えてください。問題が何であるかを理解するのに役立つ助けをいただければ幸いです

これが私のコードです:

public class WriteMovieActivity extends Activity {

}

これはlogcatです:

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

android - mp4Parser: mp3 ファイルからバックグラウンド オーディオ付きのビデオ ファイルを作成する方法

mp4Parser を使用してビデオとオーディオ ファイルをマージする Android アプリを作成しようとしています。2 つの mp4 ファイルを 1 つのファイルにマージして、最初のファイルのビデオを表示し、2 番目のファイルのオーディオを再生すると成功しました。

しかし、オーディオ ソースとして mp3 ファイルを使用できませんでした。

以下のコードは、mp3 ファイルで Movie オブジェクトを作成しようとすると例外を返します。同じコードは、m4a および mp4 ファイルでも正常に機能します。

mp3 ファイルから Movie オブジェクトを作成することは可能ですか?

誰でもこれについて私を助けてください

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

android - MediaCodec と MediaMuxer でビデオを録画しますが、ビットレートとフレームレートが正しくありません

MediaCodec と MediaMuxer を使用してビデオを録画するデモを作成しました。

デモでビデオを録画し、ffprobe を使用してビデオをチェックすると、結果は次のようになります。

ビデオとオーディオの情報が含まれています。オーディオ プロパティはソース コードで設定したものと同じですが、ビデオ プロパティが正しくありません。私のビデオ設定のソースコードは次のとおりです。

ビデオの幅と高さは適切ですが、ビットレートとフレームレートがソース コードで設定した値よりも高くなっています。その結果、ビデオ ファイルのサイズが予想よりもはるかに大きくなります。次に、ソース コードを変更してオーディオ録音スレッドを削除し、ビデオのみを録音しました。しかし、違いはありませんでした。ビットレートとフレームレートも高くなっています。誰が理由を教えてくれ、アドバイスをくれますか?

そして、別の問題があります。システムプレーヤーで再生できる壊れたビデオを時々記録しますが、ビデオの最初は黒で、1〜2秒後に通常の画像が表示されます。stackoverflow でファイルをアップロードする方法がわかりません。壊れたビデオ ファイルを必要な人に送信できます。この問題を抱えている人はいますか?

追加: 私は別の奇妙なことを見つけました: 私のビデオ エンコーディング設定:

しかし、実際のビデオ情報は次のとおりです。

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

android - MediaCodec と InputSurface で録画中にフレームをドロップする方法は?

私の Android アプリでは、タイムラプスでビデオを録画したいと考えています。InputSurface -> MediaCodec (エンコーダー) -> MediaMuxer があります。

しかし、ビデオの速度を上げたい場合 (例: 3 倍)、非常に高いフレームレートのビデオが得られます。例: 通常の速度で 30 fps のビデオを取得します。スピードアップ (x3) すると、ビデオは 90 fps になります。

ビデオのフレームレートが高いため、私の携帯電話のビデオ プレーヤーはビデオを正常に再生できません (コンピュータのビデオ プレーヤーは問題なくビデオを再生します)。そのため、フレームレートを 60fps より低く保つために、いくつかのフレームをドロップする必要があると思います。

しかし、フレームをドロップする方法がわかりません。AVC ストリームには I、B、P フレームがあり、それらは他のフレームに依存している可能性があるため、任意にドロップすることはできません。誰でも私を助けることができますか?

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

android - MediaMuxer を使用して 2 つのオーディオ サンプルをミックスし、オーディオ ファイルにエンコードする方法

現在、2 つの個別のメディア エクストラクタとコーデックを使用して、個々のサンプルをByteBuffers に分解しています。次に、各サンプルを 2 つのshort配列に格納します。次に、2 つのサンプルを 1 つに結合するミックス関数を呼び出します。short[]これshort[]を使用しAudioTrackて再生すると、必要に応じて両方のサウンドが同時に再生され、素晴らしい結果が得られます。

ただし、私が本当にやりたいことはMediaMuxer、新しいものを mp4 オーディオ ファイルに変換short[]し、後で再生するためにデバイスに保存することです。誰かが私が間違っていることを理解するのを手伝ってもらえますか?

これが私が持っているコードの一部です... ご覧のとおり、 をコメントアウトし、メディアマルチプレクサを使用してオーディオファイルを作成できるようにAudioTrackshort[]背面を ByteBufferこれにより、デバイスに保存されている正しい名前と全体の長さの新しいオーディオファイルが得られます...しかし、再生しようとすると...最初から最後まで一瞬でジャンプし、実際にはそうではありません再生とオーディオ。

アップデート

pcm ファイルをオーディオ ファイルにエンコードして再生する方法を追加しました。これにより新しいファイルが作成されますが、再生すると本来の 2 倍の長さになり、ずっと静的に再生されます。song.raw ファイルの作成方法に問題があるか、そのファイルの mp4 へのエンコードに問題があると思います。pcmファイルをmp4にエンコードするための残りのコードを次に示します。誰かが私がどこで間違っているのか教えてもらえますか? ありがとうございました。

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

android - Androidでオーディオ付きのビデオをダビングする方法

Androidで吹き替えアプリを作りたいです。アプリの流れは次のとおりです。

  1. ギャラリーからビデオとオーディオを取得します。
  2. 動画ファイルの原音を小さくします。そして、このビデオファイルに選択したオーディオをミックス (ダブ) します。
  3. このビデオ ファイルのオーディオをミキシングした後、外部メモリに保存します。

これには MediaMuxer を使用していますが、うまくいきません。これに関して私を助けてください。

よろしく、 プラテック

0 投票する
4 に答える
20291 参照

android - android - オーディオファイルとビデオファイルを多重化する方法は?

マイクから録音された 3gp ファイルと mp4 ビデオ ファイルがあります。オーディオファイルとビデオファイルをmp4ファイルに多重化して保存したい。私はたくさん検索しましたが、AndroidのMediaMuxer APIを使用するのに役立つものは何も見つかりませんでした. MediaMuxer API

更新: これは 2 つのファイルを多重化する私の方法です。例外があります。その理由は、宛先の mp4 ファイルにトラックがないためです! 誰かがオーディオとビデオのトラックをマルチプレクサに追加するのを手伝ってくれませんか??

例外

私のコード:

更新 2: 問題が解決しました! 私の質問に対する私の答えを確認してください。

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

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

android - マイクからの録音中に .pcm を aac に変換する

マイクからのサウンドを録音し、サウンドを .pcm ファイルに保存するプログラムがあります。

プログラムには、MediaCodec と MediaMuxer を使用して .pcm を aac に変換する別の関数があります。

MediaCodec を使用して .pcm を aac に直接変換するようにプログラムを変更することはできますか?どうすればよいですか? ガイドはありますか、それを行うためのコードサンプルはありますか?

これは、マイクからの音を録音する私のプログラムのコード スニペットです。