
在收到数据包之前,我想测试一下androID.net.rtp.AudioGroup
>我正在MODE SEND_ONLY中创建一个AudioStream.
>在MODE_ECHO_SUPPRESSION中创建一个AudioGroup
>然后音频流加入Audiogroup.
AudioGroup不能从麦克风接收,在扬声器上播放?我不关心它发送数据包.我只想测试麦克风的录音,并通过音频组中的扬声器功能进行播放.
在MANIFEST中,我确实将权限设置为使用Internet,Record_Audio,modify_audio_settings(对于mode_in_communication)
代码如下.
包rtp.stream;
import androID.app.Activity; import androID.os.Bundle; import androID.media.AudioManager; import androID.net.rtp.*; import androID.util.Log; import java.net.*; public class Rtpstream3_2 extends Activity { /** Called when the activity is first created. */ @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); // AudioManager AudioManager audioManager = (AudioManager) getSystemService(AUdio_SERVICE); audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); // Initialize AudioStream and set codec AudioStream inRtpStream = null; try { inRtpStream = new AudioStream(createInet(127,1)); } catch (SocketException e) { Log.d("Quit","Socket Error"); System.exit(1); } inRtpStream.setMode(RtpStream.MODE_SEND_ONLY); inRtpStream.setCodec(AudioCodec.PCMU); inRtpStream.associate(createInet(10,2,165),17222); // Initialize an AudioGroup and attach an AudioStream AudioGroup main_grp = new AudioGroup(); main_grp.setMode(AudioGroup.MODE_ECHO_SUPPRESSION); inRtpStream.join(main_grp); Log.d("Log"," Group joined"+inRtpStream.getLocalPort()); } private InetAddress createInet(int b1,int b2,int b3,int b4) { InetAddress addr = null; try { addr = InetAddress.getByAddress(new byte[] {(byte)b1,(byte)b2,(byte)b4,(byte)b3 }); } catch (UnkNownHostException e) { Log.d("Error","Cannot create Inet address"); System.exit(1); } return addr; } } 当我在运行AndroID 3.2版本的平板电脑上运行时,我根本听不到自己的声音.我在logcat中看到一条错误消息,告诉我AudioGroup无法从AudioRecord(mic)读取.就在此之前,我看到AudioPolicyManager发出一条消息,表示已经在输入中启动了.但目前没有其他应用程序使用麦克风.
以前有人看过类似的东西吗?任何想法都将不胜感激.
日志的摘录如下.
03-15 20:06:00.820: I/AudioService(286): AudioFocus requestAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls 03-15 20:06:00.820: D/AudioHarDWareMot(6337): setMode(IN_COMMUNICATION) 03-15 20:06:00.820: D/AudioHarDWareMot(6337): Putting streams to standby 03-15 20:06:00.820: D/AudioHarDWareMot(6337): AudioStreamOutMot::standby called 03-15 20:06:00.820: D/AudioHarDWareMot(6337): input 0x849f8 entering standby 03-15 20:06:00.820: D/acousticsModule(6337): acoustics close stub called. 03-15 20:06:00.820: D/AudioHarDWareMot(6337): setMode(): mode is MODE_IN_COMMUNICATION. Calling enableecns 03-15 20:06:00.820: D/AudioPostProcessor(6337): Reading ecns param file from /system/bin 03-15 20:06:00.820: D/AudioPostProcessor(6337): enableEcns() called: found param file. mEcnsEnabled value =0 03-15 20:06:00.820: D/AudioPostProcessor(6337): enableEcns(true) 03-15 20:06:00.820: **D/AudioHarDWareInterface(6337): setMode(IN_COMMUNICATION)** 03-15 20:06:00.820: D/AudioHarDWareMot(6337): setMode END 03-15 20:06:00.820: D/AudioHarDWareMot(6337): Capture session will read from ECNS thread 03-15 20:06:00.820: D/AudioHarDWareMot(6337): AudioStreamOutMot::setParameters() routing=8 **03-15 20:06:00.820: D/AudioHarDWareMot(6337): Entering doALSAinputRouting 03-15 20:06:00.820: D/AudioHarDWareMot(6337): Enter doALSAOutputRouting** 03-15 20:06:00.828: D/AudioHarDWareMot(6337): Output gain set 03-15 20:06:00.828: D/AudioHarDWareMot(6337): doRouting(): Calling mapaccy with accy 9,mNrec 1 03-15 20:06:00.828: D/AudioHarDWareMot(6337): doRouting devs: stereo 0,mono 0,input 0. Chose speaker None (gain 0xb) mic None (gain 0x1c1c) 03-15 20:06:00.828: I/dalvikvm(7385): threadID=1: recursive native library load attempt (/system/lib/librtp_jni.so) **03-15 20:06:00.835: D/AudioGroup(7385): stream[38] is configured as PCMU 8kHz 20ms mode 1 03-15 20:06:00.835: D/AudioGroup(7385): stream[42] is configured as RAW 8kHz 32ms mode 0 03-15 20:06:00.835: D/AudioGroup(7385): stream[42] joins group[41] 03-15 20:06:00.835: D/AudioGroup(7385): group[41] switches from mode 0 to 3 03-15 20:06:00.835: D/AudioGroup(7385): stream[38] joins group[41]** 03-15 20:06:00.835: D/Log(7385): Group joined55442 03-15 20:06:00.835: D/AudioHarDWareMot(6337): Output latency,using cached value = 99 03-15 20:06:00.835: D/AudioGroup(7385): reported frame count: output 789,input 800 03-15 20:06:00.835: D/AudioGroup(7385): adjusted frame count: output 789,input 800 03-15 20:06:00.835: D/AudioHarDWareMot(6337): Output latency,using cached value = 99 03-15 20:06:00.843: D/AudioHarDWareMot(6337): Output latency,using cached value = 99 03-15 20:06:00.843: D/AudioHarDWareMot(6337): AudioHarDWareMot::openinputStream enter 03-15 20:06:00.843: D/AudioHarDWareMot(6337): AudioStreamInMot::set(0xf9e8,40000,1,10,8000) 03-15 20:06:00.843: D/Omap4ALSA(6337): open called for devices 00040000 in mode 3... 03-15 20:06:00.851: I/gralloc(416): Unregistered ID: 10 handle: 0x92a7b0 size: 1280 x 800 fmt: 5 usage: 0x1300 03-15 20:06:00.851: D/Omap4ALSA(6337): setCodecDefaultControls 03-15 20:06:00.851: I/Omap4ALSA(6337): **Initialized ALSA CAPTURE device hw:0,1** 03-15 20:06:00.851: D/acousticsModule(6337): acoustics set_params stub called with 0. 03-15 20:06:00.851: D/acousticsModule(6337): acoustics close stub called. 03-15 20:06:00.851: I/gralloc(416): Unregistered ID: 9 handle: 0x94f0e8 size: 1280 x 800 fmt: 5 usage: 0x1300 03-15 20:06:00.851: D/AudioPostProcessor(6337): **disabling beamformer due to unsupported sample rate** 03-15 20:06:00.851: D/AudioHarDWareMot(6337): input bufSize from ALSA = 352 03-15 20:06:00.851: D/AudioHarDWareMot(6337): Output latency,using cached value = 99 03-15 20:06:00.859: D/AudioGroup(7385): latency: output 197,input 100 03-15 20:06:00.859: W/AudioPolicyManagerBase(6337): startinput() input 1559 Failed: other input already started 03-15 20:06:00.882: E/AudioGroup(7385): **cannot read from AudioRecord** 03-15 20:06:00.902: W/AudioPolicyManagerBase(89): startinput() input 10711 Failed: other input already started
任何指针都将非常感激.
解决方法 你交换了字节[]的顺序吗?它应该是:new byte [] {b1,b2,b3,b4}对吗?我希望这有帮助.我也想为androID创建一个rtp客户端.
private InetAddress createInet(int b1,int b4) {InetAddress addr = null;try { addr = InetAddress.getByAddress(new byte[] {(byte)b1,(byte)b3 });} 总结 以上是内存溢出为你收集整理的使用android.net.rtp全部内容,希望文章能够帮你解决使用android.net.rtp所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)