로컬 Socket을 통해 Android의 MediaRecorder에서 h264/AAC 비디오를 보내려고합니다. 목표는 RTMP 또는 RTSP를 통해 WOWZA 서버로 비디오를 보내는 것이지만, 많은 문제를 일으키고 있습니다. 지금은 LocalServerSocket에서 파일에 데이터를 쓰려고합니다.LocalSocket을 통한 MediaRecorder의 비디오 스트리밍
다음은 몇 가지 코드입니다. 미안하지만, 정말 깨끗한 아니에요,하지만 시간을 보냈다 많은 것들을 테스트하고 내 프로젝트는 지금 엉망이다. 카메라 활동에서
, 출력 파일 설정 :LocalSocket outSocket = new LocalSocket();
try {
outSocket.connect(new LocalSocketAddress(LOCAL_SOCKET));
} catch (Exception e) {
Log.i(LOG_TAG, "Error connecting socket: "+e);
}
mMediaRecorder.setOutputFile(outSocket.getFileDescriptor());
LocalServerSocket 구현 :
try {
mLocalServerSocket = new LocalServerSocket(mName);
} catch (Exception e) {
Log.e(LOG_TAG, "Error creating server socket: "+e);
return;
}
while (true) {
File out = null;
FileOutputStream fop = null;
try {
mLocalClientSocket = mLocalServerSocket.accept();
InputStream in = mLocalClientSocket.getInputStream();
out = new File(mContext.getExternalFilesDir(null), "testfile.mp4");
fop = new FileOutputStream(out);
int len = 0;
byte[] buffer = new byte[1024];
while ((len = in.read(buffer)) >= 0) {
Log.i(LOG_TAG, "Writing "+len+" bytes");
fop.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
fop.close();
mLocalClientSocket.close();
} catch (Exception e2) {}
}
}
문제는이로 인한 파일이 미디어 플레이어에서 읽을 수없는 것입니다. 이것이 인코딩 문제로 인한 것이라고 생각하십니까? 이 코드는 잘 이해하면 바이너리 파일을 생성해야합니까?!
미리 감사드립니다.
오류가 발생하지 않으면 인코딩/파일 이름 문제로 인한 것일 수 있습니다. 어떤 [OutputFormat] (http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html)을 설정 했습니까? 어쩌면 그것을 '.3gp' 또는 그렇게 도와 이름을 바꿉니다 - 여기를 참조하십시오 (http://stackoverflow.com/questions/9110711/android-mediarecorder-getting-3gp-instead-of-mpeg4) – zapl
출력 형식은 MPEG_4, 그래서 나는 그것이 .mp4 확장자로되어 있어야한다고 생각한다. 게다가, mMediaRecorder.setOutputFile()에서 .mp4 파일에 직접 쓰면 완벽하게 작동합니다. – Simon
[mediainfo] (http://mediainfo.sourceforge.net/ko)와 같은 것이 생성 된 비디오의 속성을 읽을 수 있는지 확인 했습니까? 또한 직접 생성 된 파일의 바이너리 diff (최소한 헤더)를 시도 할 수 있으며 생성 된 파일이 올바른지 확인하기 위해 로컬 소켓을 통해 파일을 보냅니다. – zapl