4

mp4parser ライブラリを使用して、2 つのビデオを連結するライブラリを作成しました。これにより、ビデオの録画を一時停止および再開できます (2 番目のビデオを録画した後、最初のビデオに追加します)。今、私の上司はラッパーを作成し、ビデオの一時停止をハードウェアでサポートしていない電話にこれを使用するように言いました。それを備えた電話(Samsung Galaxy S2およびSamsung Galaxy S1は、カメラアプリケーションを使用してビデオ録画を一時停止できます)の場合、ライブラリなしでこれを行う必要があるため、高速になります。メディアレコーダーの状態図http://developer.android.com/reference/android/media/MediaRecorder.htmlに見られるように、一時停止状態がない場合、このネイティブをどのように実装できますか?

Samsung Galaxe Ace から Camera.apk アプリを逆コンパイルしました。コードの CamcorderEngine.class には、次のようなメソッドがあります。

public void doPauseVideoRecordingSync()
{
Log.v("CamcorderEngine", "doPauseVideoRecordingSync");
if (this.mMediaRecorder == null)
{
  Log.e("CamcorderEngine", "MediaRecorder is not initialized.");
  return;
}
if (!this.mMediaRecorderRecording)
{
  Log.e("CamcorderEngine", "Recording is not started yet.");
  return;
}
try
{
  this.mMediaRecorder.pause();
  enableAlertSound();
  return;
}
catch (RuntimeException localRuntimeException)
{
  Log.e("CamcorderEngine", "Could not pause media recorder. ", localRuntimeException);
  enableAlertSound();
}

}

コードで試してみると、うまくいきthis.mMediaRecorder.pause();ません。どうすれば可能ですか。同じインポート (android.media.MediaRecorder) を使用します。システムレベルでコード全体を書き直しましたか?

(録画中に) 2 番目のビデオの入力ストリームを取得し、このデータを最初のビデオに直接追加することは可能ですか? 私の連結メソッドでは、2 つのパラメーター (2 つのビデオ、どちらも FileInputStream) を使用します。記録関数から InputStream を取得し、それを 2 番目のパラメーターとして渡すことは可能ですか?

4

1 に答える 1

2

this.mMediaRecorder.pause(); を試してみると

このMediaRecorderクラスには関数がないpause()ため、この特定のデバイスにカスタム MediaRecorder クラスがあることは明らかです。これは珍しいことではありません。OEM に要求されるのは、デバイスで「Android 互換性テスト」に合格することだけです。機能の追加に制限はありません。

(録画中に) 2 番目のビデオの入力ストリームを取得し、このデータを最初のビデオに直接追加することは可能ですか?

ビデオ ストリームはエンコードされたデータ (コーデック ヘッダー、キー フレームなど) であり、2 つのストリームを 1 つのファイルに結合するだけでは有効なビデオ ファイルが生成されないため、これが可能かどうかはわかりません。

基本的にあなたができること:

  1. カメラ プレビュー サーフェスから生データ画像を取得します (Camera.setPreviewCallback() を参照)。
  2. android.media.MediaCodec を使用してビデオをエンコードします
  3. 次に、OutputFilStream を使用してファイルに書き込みます。

これにより、必要な柔軟性が得られます。この場合、アプリでどのフレームがエンコーダーに取り込まれ、どのフレームが取り込まれないかを決定します。ただし、特定のプロジェクトにとってはやり過ぎかもしれませんし、パフォーマンスの問題が発生する可能性もあります。

PS。ところで、MediaMuxer を調べてみてください。あなたにも役立つかもしれません。developer.android.com/reference/android/media/MediaMuxer.html

于 2014-11-13T07:14:27.460 に答える