Android socket传送音频同步问题

pzhao1 2014-08-14 02:30:07
各位大牛好!最近做个项目是在两个安卓手机之间传送音频数据然后同步播放,通过WiFi,TCP传送,主机开两个线程,一个播放一个传送数据,从机开一个线程,一边接收数据一边mAudioTrack.write(),我现在遇到个问题,就是如果每次两个手机第一次连接后(一个手机作为热点连接),运行程序接收数据的一侧能立即反应过来播放音频,而且基本与主机播放同步;然后我关闭程序再打开,接收方开始就会有很长一段杂音,然后才能播放,而且很明显有掉数据,因为听到的都是从中间开始播放的,主从机不同步,请问只是怎么回事啊,一头雾水。。
下面是相关代码:



先谢谢大家啦!
...全文
518 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianminfly 2015-07-31
  • 打赏
  • 举报
回复
请问一下楼主,我new Socket()的时候会连接超时,连不上指定的ip,intnet权限也给了,new socket是在子线程中调用的,谢谢了
pzhao1 2014-08-16
  • 打赏
  • 举报
回复
引用 4 楼 s_include 的回复:
[quote=引用 楼主 u012399912 的回复:] 各位大牛好!最近做个项目是在两个安卓手机之间传送音频数据然后同步播放,通过WiFi,TCP传送,主机开两个线程,一个播放一个传送数据,从机开一个线程,一边接收数据一边mAudioTrack.write(),我现在遇到个问题,就是如果每次两个手机第一次连接后(一个手机作为热点连接),运行程序接收数据的一侧能立即反应过来播放音频,而且基本与主机播放同步;然后我关闭程序再打开,接收方开始就会有很长一段杂音,然后才能播放,而且很明显有掉数据,因为听到的都是从中间开始播放的,主从机不同步,请问只是怎么回事啊,一头雾水。。 下面是相关代码: 先谢谢大家啦!
对于这个的话,我的建议是 接收端建一个buff 最好足够到,发送方先发送数据,当接收方的buff存满后,再同时播放,就相当于你网上看视频一样,先缓冲再播放,而不是接到数据就播。[/quote]谢谢你啦,回头试下。
manxiSafe 2014-08-15
  • 打赏
  • 举报
回复
引用 楼主 u012399912 的回复:
各位大牛好!最近做个项目是在两个安卓手机之间传送音频数据然后同步播放,通过WiFi,TCP传送,主机开两个线程,一个播放一个传送数据,从机开一个线程,一边接收数据一边mAudioTrack.write(),我现在遇到个问题,就是如果每次两个手机第一次连接后(一个手机作为热点连接),运行程序接收数据的一侧能立即反应过来播放音频,而且基本与主机播放同步;然后我关闭程序再打开,接收方开始就会有很长一段杂音,然后才能播放,而且很明显有掉数据,因为听到的都是从中间开始播放的,主从机不同步,请问只是怎么回事啊,一头雾水。。 下面是相关代码: 先谢谢大家啦!
对于这个的话,我的建议是 接收端建一个buff 最好足够到,发送方先发送数据,当接收方的buff存满后,再同时播放,就相当于你网上看视频一样,先缓冲再播放,而不是接到数据就播。
manxiSafe 2014-08-15
  • 打赏
  • 举报
回复
在你客户端退出后,server端也要跟着close
manxiSafe 2014-08-15
  • 打赏
  • 举报
回复
引用 1 楼 u012399912 的回复:
别沉啊!!又发现个问题,有时候试着试着连接不上了, log输出如下: W/System.err(16727): java.net.ConnectException: failed to connect to /192.168.43.179 (port 12345) after 90000ms: isConnected failed: ECONNREFUSED (Connection refused), 貌似改下端口号有可以了,这是怎么回事啊? 求大神支援!!
连接不上是因为 你先前的端口还没有释放
new Thread(){
			public void run(){  
				  try  
			        {   
			            //创建ServerSocket   
			            ServerSocket serverSocket = new ServerSocket(6410);  
			            while (true && serverSocket != null)   
			            {   
			                //接受客户端请求   
			                Socket client = serverSocket.accept();   
			                //System.out.println("accept");   
			                try  
			                {   
			                    //接收客户端消息   
			                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));   
			                    char[] buffer = new char[1024];  
								int countnum = 0;  
								if((countnum = in.read(buffer))>0)  { 	  
									//doSomeThing();
								}			                    
			                    in.close();   
			                }   
			                catch (Exception e)   
			                {   
			                    System.out.println(e.getMessage());   
			                    e.printStackTrace();   
			                }   
			                finally  
			                {   
			                    //关闭   
			                	if(client != null){
			                		client.close();   
			                		System.out.println("close"); 
			                	}
			                }   
			            }   
			        }   
			        catch (Exception e)   
			        {   
			            System.out.println(e.getMessage());   
			        }   
	          }   
		}.start();
pzhao1 2014-08-14
  • 打赏
  • 举报
回复
别沉啊!!又发现个问题,有时候试着试着连接不上了, log输出如下: W/System.err(16727): java.net.ConnectException: failed to connect to /192.168.43.179 (port 12345) after 90000ms: isConnected failed: ECONNREFUSED (Connection refused), 貌似改下端口号有可以了,这是怎么回事啊? 求大神支援!!

80,351

社区成员

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

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