问题描述
我有几个基本问??题,与实际在另一部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);
我在这个上 ,我们需要修复随套接字文件描述符一起发送的文件描述符流。
他提到我需要管理mdat
原子以及文件类型标头。
为了解决这些问题,我需要更改代码的哪些部分。
我该如何处理套接字上的蓝牙流,如何缓冲来自蓝牙输入流的内容,修复标头和mdat原子( 我真的不知道这些是什么 ),然后...
然后...如何将修改后的原始流传递给媒体播放器?
这可能吗?
1楼
将流传递给MediaPlayer的唯一方法是在Android设备(127.0.0.1)的本地主机上创建具有支持的HTTP服务器(例如 ),并通过uri http://127.0.0.1:55555/...
传输流http://127.0.0.1:55555/...
到MediaPlayer。
Android仅支持mp4、3gp和webm视频格式,并且应该位于要由MediaPlayer类播放的流的开头。