제가 지금 오디오나 비디오(카메라)를 MediaRecorder를 이용하여 저장 중 입니다.
어떻게 어떻게 해서 오디오나 비디오를 저장하는데는 성공을 하였는데....
저장된 파일을 PC로 옮겨서 재생해보니 오디오와 비디오가 따로따로 들리는 현상이 있습니다.
즉, 30초 분량을 녹화 했다면, 처음 30초 동은은 비디오만 재생되고, 비디오가 다 재생된 이후에 오디오가 재생되는
이상한 현상이...
이거저거 별짓 다 해 봤는데, 해결될 기미가 보이지 않네요...
그래서 비디오 빼고 오디오만 한번 저장을 해 봤는데, 오디오만 따로 해도... 이상한 동작을 합니다.
비디오는 없는데도 불구하고, 처음에 비디오를 몇 초간 재생하고(물론 아무 화면도 나오지 않습니다), 그 다음에 오디오 재생을 시작 합니다.
아래는 실행한 오디오 소스.
MediaRecorder 로 오디오든 비디오든 저장해본 사람 있으시면, 도움을...plz
=====================
import android.app.Activity;
import android.os.Bundle;
import java.io.File;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.MediaColumns;
import android.util.Log;
import android.view.View;
import android.widget.Button;
/**
* This is main class which shows how to capture/record audio
* @author The Developer's Info
*
*/
public class AudioCapture extends Activity {
private MediaRecorder mediaRecorder;
private File file = null;
static final String PREFIX = "record";
static final String EXTENSION = ".3gpp";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mediaRecorder = new MediaRecorder();
Button startRecording = (Button) findViewById(R.id.startBtn);
Button stopRecording = (Button) findViewById(R.id.stopBtn);
startRecording.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
startRecording();
} catch (Exception e) {
e.printStackTrace();
}
}
});
stopRecording.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopRecording();
saveToDB();
}
});
}
/**
* This method starts recording process
* @throws Exception
*/
private void startRecording() throws Exception {
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
if (file == null) {
File rootDir = Environment.getExternalStorageDirectory();
file = File.createTempFile(PREFIX, EXTENSION, rootDir);
}
mediaRecorder.setOutputFile(file.getAbsolutePath());
mediaRecorder.prepare();
mediaRecorder.start();
}
/**
* This method stops recording
*/
private void stopRecording() {
mediaRecorder.stop();
mediaRecorder.release();
}
/**
* This method sets all metadata for audio file
*/
private void saveToDB() {
ContentValues values = new ContentValues(3);
long current = System.currentTimeMillis();
values.put(MediaColumns.TITLE, "My Audio record");
values.put(MediaColumns.DATE_ADDED, (int) (current));
// values.put(MediaColumns.DATE_ADDED, (int) (current / 1000));
values.put(MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaColumns.DATA, file.getAbsolutePath());
ContentResolver contentResolver = getContentResolver();
Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Uri newUri = contentResolver.insert(base, values);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
}
}
저도 딱 님 수준 정도(네트워크로 저장) 해보고 필요하면 더 진도 나가보려고 멈춰둔 상태네요^^;;;