Tôi đang cố gắng gửi video h264/AAC từ MediaRecorder của Android thông qua một Ổ cắm cục bộ. Mục đích là để gửi video đến một máy chủ WOWZA qua RTMP hoặc RTSP, nhưng nó mang lại cho tôi rất nhiều rắc rối và bây giờ tôi chỉ đang cố gắng ghi dữ liệu vào một tệp từ LocalServerSocket.Streaming video từ MediaRecorder qua LocalSocket
Dưới đây là một số mã. Xin lỗi nó không thực sự sạch sẽ, nhưng tôi đã dành nhiều giờ thử nghiệm nhiều thứ và dự án của tôi là một mớ hỗn độn ngay bây giờ.
Trong hoạt động Camera, thiết lập tập tin đầu ra:
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());
Việc thực hiện 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) {}
}
}
Vấn đề là file kết quả từ này là không thể đọc được bởi bất kỳ media player. Bạn có nghĩ điều này là do sự cố mã hóa không? Mã này sẽ tạo ra một tệp nhị phân nếu tôi hiểu rõ ?!
Xin cảm ơn trước, chúc mừng.
nếu bạn không gặp lỗi, có thể do vấn đề về mã hóa/tên tệp. [OutputFormat] (http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html) bạn đã đặt? Có thể đổi tên nó thành '.3gp' hoặc như vậy sẽ giúp - xem [ở đây] (http://stackoverflow.com/questions/9110711/android-mediarecorder-getting-3gp-instead-of-mpeg4) – zapl
Định dạng đầu ra là MPEG_4, vì vậy tôi đoán nó nên bằng ok với một phần mở rộng .mp4. Bên cạnh đó, nếu tôi viết trực tiếp vào một tập tin .mp4 trong mMediaRecorder.setOutputFile() nó hoạt động hoàn hảo. – Simon
bạn có kiểm tra xem một cái gì đó như [mediainfo] (http://mediainfo.sourceforge.net/en) có thể đọc các thuộc tính của video được tạo không? Bạn cũng có thể thử một khác biệt nhị phân (ít nhất là tiêu đề) của tệp được tạo trực tiếp và tệp gửi qua ổ cắm cục bộ của bạn để kiểm tra xem tệp được tạo có đúng không. – zapl