Android中audiostream的应用

baidu_32111589 2018-04-08 01:42:03
正在开发的一个Android项目,打算用到音频的实施传播,发现android支持android.net.rtp,在查看文档的时候看到audiostream,audiogroup等类,说明上说能直接传输rtp文件,但是不明白怎么使用,网上也很难找到类似的使用
猜想是audiostream能直接录制声音文件,然后经过一个流媒体服务器转发,我也下载了easyDarwin,但还是没有例子可循,不知道怎么下手。 有哪位大神做过类似的开发吗?
...全文
705 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_32111589 2018-04-09
  • 打赏
  • 举报
回复
引用 2 楼 xj396282771 的回复:
你网上查查这个AudioRecord硬解码采集音频流,将得到的byte[]字节数组,传输就行了,这应该支持任何的传输协议 AudioConfig public class AudioConfig { /** * Recorder Configure */ public static final int SAMPLERATE = 8000;// 8KHZ public static final int PLAYER_CHANNEL_CONFIG = AudioFormat.CHANNEL_CONFIGURATION_MONO; public static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; /** * Recorder Configure */ public static final int AUDIO_RESOURCE = MediaRecorder.AudioSource.MIC; public static final int RECORDER_CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; } AudioRecorder public class AudioRecorder implements Runnable { String LOG = "Recorder "; private boolean isRecording = false; private AudioRecord audioRecord; private static final int BUFFER_FRAME_SIZE = 480; private int audioBufSize = 0; // private byte[] samples;// data // the size of audio read from recorder private int bufferRead = 0; // samples size private int bufferSize = 0; /* * start recording */ public void startRecording() { bufferSize = BUFFER_FRAME_SIZE; audioBufSize = AudioRecord.getMinBufferSize(AudioConfig.SAMPLERATE, AudioConfig.RECORDER_CHANNEL_CONFIG, AudioConfig.AUDIO_FORMAT); if (audioBufSize == AudioRecord.ERROR_BAD_VALUE) { Log.e(LOG, "audioBufSize error"); return; } samples = new byte[audioBufSize]; if (null == audioRecord) { audioRecord = new AudioRecord(AudioConfig.AUDIO_RESOURCE, AudioConfig.SAMPLERATE, AudioConfig.RECORDER_CHANNEL_CONFIG, AudioConfig.AUDIO_FORMAT, audioBufSize); } new Thread(this).start(); } /* * stop */ public void stopRecording() { this.isRecording = false; } public boolean isRecording() { return isRecording; } public void run() { // start encoder before recording AudioEncoder encoder = AudioEncoder.getInstance(); encoder.startEncoding(); System.out.println(LOG + "audioRecord startRecording()"); audioRecord.startRecording(); System.out.println(LOG + "start recording"); this.isRecording = true; while (isRecording) { bufferRead = audioRecord.read(samples, 0, bufferSize);// 这里的bufferRead就是我说的字节数组 if (bufferRead > 0) { // add data to encoder encoder.addData(samples, bufferRead);//这是我自己业务处理,这相关的你都可以删了 } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(LOG + "end recording"); audioRecord.stop(); encoder.stopEncoding(); } }
谢谢,我确实在网上看到这个方案,但是我也想知道android.net.rtp怎么用,因为看上去如果能用的话这个就能很简便地解决问题。 如果没有大佬来教的话,我会采纳你的。
Jing丶無雙 2018-04-08
  • 打赏
  • 举报
回复
你网上查查这个AudioRecord硬解码采集音频流,将得到的byte[]字节数组,传输就行了,这应该支持任何的传输协议 AudioConfig public class AudioConfig { /** * Recorder Configure */ public static final int SAMPLERATE = 8000;// 8KHZ public static final int PLAYER_CHANNEL_CONFIG = AudioFormat.CHANNEL_CONFIGURATION_MONO; public static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; /** * Recorder Configure */ public static final int AUDIO_RESOURCE = MediaRecorder.AudioSource.MIC; public static final int RECORDER_CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; } AudioRecorder public class AudioRecorder implements Runnable { String LOG = "Recorder "; private boolean isRecording = false; private AudioRecord audioRecord; private static final int BUFFER_FRAME_SIZE = 480; private int audioBufSize = 0; // private byte[] samples;// data // the size of audio read from recorder private int bufferRead = 0; // samples size private int bufferSize = 0; /* * start recording */ public void startRecording() { bufferSize = BUFFER_FRAME_SIZE; audioBufSize = AudioRecord.getMinBufferSize(AudioConfig.SAMPLERATE, AudioConfig.RECORDER_CHANNEL_CONFIG, AudioConfig.AUDIO_FORMAT); if (audioBufSize == AudioRecord.ERROR_BAD_VALUE) { Log.e(LOG, "audioBufSize error"); return; } samples = new byte[audioBufSize]; if (null == audioRecord) { audioRecord = new AudioRecord(AudioConfig.AUDIO_RESOURCE, AudioConfig.SAMPLERATE, AudioConfig.RECORDER_CHANNEL_CONFIG, AudioConfig.AUDIO_FORMAT, audioBufSize); } new Thread(this).start(); } /* * stop */ public void stopRecording() { this.isRecording = false; } public boolean isRecording() { return isRecording; } public void run() { // start encoder before recording AudioEncoder encoder = AudioEncoder.getInstance(); encoder.startEncoding(); System.out.println(LOG + "audioRecord startRecording()"); audioRecord.startRecording(); System.out.println(LOG + "start recording"); this.isRecording = true; while (isRecording) { bufferRead = audioRecord.read(samples, 0, bufferSize);// 这里的bufferRead就是我说的字节数组 if (bufferRead > 0) { // add data to encoder encoder.addData(samples, bufferRead);//这是我自己业务处理,这相关的你都可以删了 } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(LOG + "end recording"); audioRecord.stop(); encoder.stopEncoding(); } }
键盘舞者113 2018-04-08
  • 打赏
  • 举报
回复
基于RTMP协议传输MP4文件 https://blog.csdn.net/z979451341/article/details/79392386

80,351

社区成员

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

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