我有几个基本问​​题,与实际在另一部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原子(我真的不知道这些是什么),然后...然后...如何将修改后的原始流传递给媒体播放器?这可能吗? 最佳答案 将流传递给MediaPlayer的唯一方法是在Android设备(127.0.0.1)的本地主机上创建具有NanoHTTPD支持的自己的HTTP服务器(以range request为例),并通过uri 到MediaPlayer。 Android仅支持mp4、3gp和webm视频格式,moov atom应该位于要由MediaPlayer类播放的流的开头。
07-28 03:40