11

私は必要なプロジェクトに取り組んでいます

  1. 入力 H.264 エンコード ストリームを IPCamera から読み取ります - rtsp://192.168.1.83:8001/ のような rtsp URL からこれを取得できます

  2. IPCamera ストリームを表示します。これは、


final VideoView vv = (VideoView) findViewById(R.id.video_view_h264);
        MediaController mc = new MediaController(getApplicationContext());
        vv.setVideoURI(video);
        vv.setMediaController(mc);
        vv.requestFocus();
        vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            public void onPrepared(MediaPlayer mp) {
                vv.start();
            }
        });

  1. このストリームを MP4 ファイルに記録したいと思います。これが私が立ち往生しているところであり、次のオプションを検討しています

a) MediaRecorder - Google 検索に基づいて、このクラスの入力はデバイス カメラからのみ可能であると考えています。rtsp stream からの入力を提供できる場所でこれを微調整する方法はありますか?

b) MediaCodec API - 4.1 以降 Android は、MediaExtractor と MediaCodec を備えたこの低レベル API をリリースしました。このオプションの場合、次のスニペットでは rtsp ストリームを使用できないと思います

final String STREAM_URL = "rtsp://192.168.1.83:8001/";
MediaExtractor mediaExtractor = new MediaExtractor();
mediaExtractor.setDataSource(STREAM_URL); // I get an exception 04-28 18:30:18.914: E/AndroidRuntime(8140): Caused by: java.io.IOException: Failed to instantiate extractor.

c) URL から読み取り、ファイルのように保存できますか? このストリームを MP4 ファイルに変換するにはどうすればよいですか? どのコード スニペットも非常に役立ちます。

FFMPEG も使用しようとしましたが、パフォーマンスが非常に悪かったため、このオプションを削除しました。

上記の 3 つのオプション、または私が検討できるその他の追加オプションに関するご意見をいただければ幸いです。

ありがとう !!

4

2 に答える 2

1

ここでまったく同じ問題が発生しました。FFmpeg は問題を解決し、私には非常に効率的であるように見えますが、ハードウェアに依存しているため、各デバイスの CPU の特定のアーム バージョン用にコンパイルする必要があります。

別のアプローチ jcodec ( http://jcodec.org/ ) ですが、rtsp ストリームを保存する方法がまだわかりません。これは純粋な Java ライブラリですが、利用できるドキュメントはあまりありません。

やり方が分かれば教えてください。

于 2013-06-14T15:34:32.143 に答える
1

MediaRecorderが直接ストリーミング コンテンツの処理をサポートしていないのは事実です。フレームワークの観点からは、 のようなパーサー オブジェクトとMediaExtractorのようなコーデック オブジェクトがありますMediaCodecが、ライターの抽象化は (まだ) ありません。

AOSPのはrecordVideo、単純なファイル ベースの記録を目的としたコマンド ライン ユーティリティです。実装の一部として、エンコーダーが作成され、ここでMPEG4Writer観察されたようにに渡されます。このコードを再利用して、着信ストリームをファイルに直接書き込もうとする可能性があります。

このために、ストリーミング入力を としてモデルMediaSource化し、ライターに直接渡すことができます。ストリーミング ソースから特定の基本をセットアップmetaDataし、それをダウンストリーム ライターに渡す必要があります。MediaRecorder入力ソースを直接モデル化できる場合は、新しい を作成する必要がない場合があります。

于 2013-04-30T00:39:17.390 に答える