关于如何在另一个Android手机上实际查看流,我有几个基本问题。录音电话使用以下功能记录到BluetoothSocket
文件描述符:
private void Record() {
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setVideoEncodingBitRate(512 * 1000);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);
if (mBluetoothSocket != null) {
try {
Field reflectedPfdField = mBluetoothSocket.getClass().getDeclaredField("mPfd");
reflectedPfdField.setAccessible(true);
ParcelFileDescriptor mParcelSCStream = (ParcelFileDescriptor) reflectedPfdField.get(mBluetoothSocket);
if (mParcelSCStream != null) {
mMediaRecorder.setOutputFile(mParcelSCStream.getFileDescriptor());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
由于套接字文件描述符不可查找,我们不能相对这样做:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(bluetoothFileDescriptor);
我已经阅读了这个mattakis blog我们需要修复使用套接字文件描述符发送的文件描述符流。他提到我需要管理mdat
原子以及文件类型标题。 我需要更改哪些代码来修复这些内容。
如何通过套接字处理蓝牙流,缓冲蓝牙输入流中的内容,修复标头和mdat原子(我真的不知道这些是什么是),然后......
然后......我怎样才能将修改后的原始流传递给媒体播放器?
这可能吗?
答案 0 :(得分:1)
将流传递给MediaPlayer的唯一方法是创建自己的HTTP服务器(NanoHTTPD为例),在Android设备的本地主机(127.0.0.1)上支持range request并传输您的流通过uri http://127.0.0.1:55555/...
到MediaPlayer。 Android仅支持mp4,3gp和webm视频格式,而moov atom应位于您的流的开头,由MediaPlayer类播放。