MediaRecorder实时采集传输音频问题

qq_35173055 2017-02-14 11:04:43
用MediaRecorder来做客户端的音频采集,下面是一些基础设置,
MediaRecorder audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
final int mono = 1;
audioRecorder.setAudioChannels(mono);
audioRecorder.setAudioSamplingRate(8000);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

// 重点
audioRecorder.setOutputFile(sender.getFileDescriptor());

audioRecorder.prepare();
audioRecorder.start();

用localsocket来实时传输音频
LocalServerSocket lss = new LocalServerSocket(serverName);
LocalSocket receiver = new LocalSocket();
receiver.connect(new LocalSocketAddress(serverName));
receiver.setReceiveBufferSize(bufSize);
receiver.setSendBufferSize(bufSize);

LocalSocket sender = lss.accept();
sender.setReceiveBufferSize(bufSize);
sender.setSendBufferSize(bufSize);

但是在一些机器上如小米、魅族在audioRecorder.start(); 是会报错 start failed -38

如果将audioRecorder.setOutputFile(sender.getFileDescriptor()); 改成向文件写入:
File soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/sound.amr");
audioRecorder.setOutputFile(soundFile.getAbsolutePath());
就可以正常录音

有哪位知道原因或者解决办法呢? 谢谢
...全文
901 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_34230930 2017-10-10
  • 打赏
  • 举报
回复
请问parcelfiledescriptor在三星 s7有时候会出现没有办法录音,该怎么解决
忐忑爻不爻 2017-08-17
  • 打赏
  • 举报
回复
楼主这个实时传输做好了嘛,我现在也在做这块,不知道怎么做能发个Demo嘛,谢谢了,1522838953@qq.com
qq_35173055 2017-02-16
  • 打赏
  • 举报
回复
如果是想根据用户需要自己设定音频聊天还是视频聊天的话,是不是必须用两套程序分别处理音频和视频。
qq_35173055 2017-02-16
  • 打赏
  • 举报
回复
楼上的朋友可以具体说说么?或者有什么参考资料可以发一下,谢谢
媒体盒子 2017-02-16
  • 打赏
  • 举报
回复
用LocalSocket的方式会有问题的,后面视频根本无法进行。建议使用AudioRecorder + Camera + MediaCodec的方式实现
我就是我 2017-02-15
  • 打赏
  • 举报
回复
还有就是,这个我现在只用在音频录制上,不知道你需要视频的功能吗,视频的我还在搞
我就是我 2017-02-15
  • 打赏
  • 举报
回复
你试下这个: 主要是将LocalSocket替换为ParcelFileDescriptor 初始化MediaRecorder之前,加入如下代码 ParcelFileDescriptor[] parcelFileDescriptors; try { parcelFileDescriptors = ParcelFileDescriptor.createPipe(); parcelRead = new ParcelFileDescriptor(parcelFileDescriptors[0]); parcelWrite = new ParcelFileDescriptor(parcelFileDescriptors[1]); } catch (IOException e) { e.printStackTrace(); } 然后将代码:mediarecorder.setOutputFile(sender.getFileDescriptor()); 替换成:mediarecorder.setOutputFile(parcelWrite.getFileDescriptor()); 最后,获取inputstream改为 DataInputStream dataInput = new DataInputStream(new ParcelFileDescriptor.AutoCloseInputStream(parcelRead));
qq_35173055 2017-02-15
  • 打赏
  • 举报
回复
非常感谢楼上的朋友,小米手机不能录音的问题解决了,但是还有一个问题就是小米手机在接受别人发的音频只能收很短的时间,后面大量内容无法播放,这个问题我还没有调查,不知道你有没有遇到过。 另外关于视频的部分我们在以后的开发中还是要做的,方便加个QQ,咱俩好即时沟通么?

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧