当前位置: 代码迷 >> Android >> 如何通过蓝牙流式传输套接字文件描述符的内容?
  详细解决方案

如何通过蓝牙流式传输套接字文件描述符的内容?

热度:71   发布时间:2023-08-04 11:56:22.0

我有几个基本问??题,与实际在另一部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原子( 我真的不知道这些是什么 ),然后...

然后...如何将修改后的原始流传递给媒体播放器?

这可能吗?

将流传递给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类播放的流的开头。

  相关解决方案