問題タブ [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 - 動画の URL を指定して、動画のクリップを Android フォンに保存するにはどうすればよいですか?
ビデオの URL (例: www.example.com/video.mp4) を指定して、Android でビデオの短いクリップ (例: 5 秒、00:00:10 - 00:00:15) をプログラムで保存するにはどうすればよいですか?電話へのアプリケーション?
現時点では、これが私が持っているものですが、これにより、ビデオ全体が URL からデバイスに保存されます。MediaExtractor と MediaMuxer を使用する必要があるようです。
android - MediaCodec エンコーダー (I420、NV12、Planar、Semi-Planar など) の違いは何ですか?
このページを参照: http://bigflake.com/mediacodec/
A5. カメラ出力と MediaCodec エンコーダー入力のカラー フォーマットは異なります。カメラは YV12 (平面 YUV 4:2:0) および NV21 (半平面 YUV 4:2:0) をサポートします。MediaCodec エンコーダーは、次の 1 つ以上をサポートします。
#19 COLOR_FormatYUV420Planar (I420)
#20 COLOR_FormatYUV420PackedPlanar (I420 も)
#21 COLOR_FormatYUV420SemiPlanar (NV12)
#39 COLOR_FormatYUV420PackedSemiPlanar (NV12 も)
#0x7f000100 COLOR_TI_FormatYUV420PackedSemiPlanar (NV12 も)
私のアプリケーションでは、YUY2 形式で外部カメラからフレームをキャプチャし、それらを使用可能な形式に変換して、MediaMuxer に供給しています。
ここで読んだことに基づいて、これは、MediaCodecInfo.CodeCapabilities でデバイスがサポートするものを照会する必要があることを意味します。次に、それに基づいて、YUY2 から適切な形式への変換を行います。少なくともこれは私の理解です。
コーデック形式の海では、これらの違いと、アプリケーションでそれらすべてを説明する必要があるかどうかがわかりません。もしそうなら、これらのフォーマットのバイトレイアウトを知る必要があります。正しいと思うものを埋めました。上から下へ:
FormatYUV420Planar - YYYY YYYY UU VV
FormatYUVPackedPlanar - ???
FormatYUV420SemiPlanar -- YYYY YYYY VU VU
FormatYUV420PackedSemiPlanar -- ???
COLOR_TI_FormatYUV420PackedSemiPlanar -- ???
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_WIDTH
MediaFormat.KEY_HEIGHT
File
File
それで、質問:ビデオの解像度を圧縮して再スケーリング/変更するMediaMuxer
方法と、その他の付随するクラスとメソッドを使用するにはどうすればよいですか?
PS。マルチプレクサに関する多くの有用な情報がここにあり、上記のコードベースMediaMuxerTest.java
はメソッドに基づいていますcloneMediaUsingMuxer
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();
エラーログ
android - Android で EncodeAndMux と HelloEffects を組み合わせる
MediaCodec と MediaMuxer を使用して、一連の画像でビデオを作成しようとしています。エンコーディングの前に、各ビットマップにエフェクトも適用したいと思います。
ビデオは正しい長さで作成されますが、出力は黒い画面のみです。
私は、 bigflake.com でEncodeAndMuxの例を見てきました ( を変更し、generateFrame()
作成時に共有コンテキストを追加しましたCodecInputSurface
) 。
および Google の HelloEffects を使用して EffectFactory をセットアップします。
私のアイデアは、2 つの EGLContexts を作成することでした。
私は OpenGl と Android を初めて使用するので、間違った方法で行っているかどうか教えてください。問題が何であるかを理解するのに役立つ助けをいただければ幸いです
これが私のコードです:
public class WriteMovieActivity extends Activity {
}
これはlogcatです:
android - mp4Parser: mp3 ファイルからバックグラウンド オーディオ付きのビデオ ファイルを作成する方法
mp4Parser を使用してビデオとオーディオ ファイルをマージする Android アプリを作成しようとしています。2 つの mp4 ファイルを 1 つのファイルにマージして、最初のファイルのビデオを表示し、2 番目のファイルのオーディオを再生すると成功しました。
しかし、オーディオ ソースとして mp3 ファイルを使用できませんでした。
以下のコードは、mp3 ファイルで Movie オブジェクトを作成しようとすると例外を返します。同じコードは、m4a および mp4 ファイルでも正常に機能します。
mp3 ファイルから Movie オブジェクトを作成することは可能ですか?
誰でもこれについて私を助けてください
android - MediaCodec と MediaMuxer でビデオを録画しますが、ビットレートとフレームレートが正しくありません
MediaCodec と MediaMuxer を使用してビデオを録画するデモを作成しました。
デモでビデオを録画し、ffprobe を使用してビデオをチェックすると、結果は次のようになります。
ビデオとオーディオの情報が含まれています。オーディオ プロパティはソース コードで設定したものと同じですが、ビデオ プロパティが正しくありません。私のビデオ設定のソースコードは次のとおりです。
ビデオの幅と高さは適切ですが、ビットレートとフレームレートがソース コードで設定した値よりも高くなっています。その結果、ビデオ ファイルのサイズが予想よりもはるかに大きくなります。次に、ソース コードを変更してオーディオ録音スレッドを削除し、ビデオのみを録音しました。しかし、違いはありませんでした。ビットレートとフレームレートも高くなっています。誰が理由を教えてくれ、アドバイスをくれますか?
そして、別の問題があります。システムプレーヤーで再生できる壊れたビデオを時々記録しますが、ビデオの最初は黒で、1〜2秒後に通常の画像が表示されます。stackoverflow でファイルをアップロードする方法がわかりません。壊れたビデオ ファイルを必要な人に送信できます。この問題を抱えている人はいますか?
追加: 私は別の奇妙なことを見つけました: 私のビデオ エンコーディング設定:
しかし、実際のビデオ情報は次のとおりです。
android - MediaCodec と InputSurface で録画中にフレームをドロップする方法は?
私の Android アプリでは、タイムラプスでビデオを録画したいと考えています。InputSurface -> MediaCodec (エンコーダー) -> MediaMuxer があります。
しかし、ビデオの速度を上げたい場合 (例: 3 倍)、非常に高いフレームレートのビデオが得られます。例: 通常の速度で 30 fps のビデオを取得します。スピードアップ (x3) すると、ビデオは 90 fps になります。
ビデオのフレームレートが高いため、私の携帯電話のビデオ プレーヤーはビデオを正常に再生できません (コンピュータのビデオ プレーヤーは問題なくビデオを再生します)。そのため、フレームレートを 60fps より低く保つために、いくつかのフレームをドロップする必要があると思います。
しかし、フレームをドロップする方法がわかりません。AVC ストリームには I、B、P フレームがあり、それらは他のフレームに依存している可能性があるため、任意にドロップすることはできません。誰でも私を助けることができますか?