gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:49:05 25 4
gpt4 key购买 nike

关于如何在另一部 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 原子以及文件类型 header 。 我需要更改哪些代码部分才能修复这些问题。

我如何通过套接字处理蓝牙流,缓冲蓝牙输入流中的内容,修复 header 和 mdat 原子(我真的不知道这些是什么) ,那么……

那么...我怎样才能将修改后的原始流传递给媒体播放器?

这可能吗?

最佳答案

将流传递给 MediaPlayer 的唯一方法是使用 NanoHTTPD 创建您自己的 HTTP 服务器(以 range request 为例)在您的 Android 设备 (127.0.0.1) 的本地主机上支持并通过 uri http://127.0.0.1:55555/... 将您的流传输到 MediaPlayer。 Android 仅支持 mp4、3gp 和 webm 视频格式和 moov atom应该在流的开头,由 MediaPlayer 类播放。

关于android - 如何通过蓝牙传输套接字文件描述符的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33321856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com