代码整理——wifi语音

package com.lovejia.WifiVoip;

import java.io.IOException;
import java.net.InetAddress;
import java.net.MulticastSocket;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.MulticastLock;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends Activity {
	MulticastLock multicastLock;  
	private Button btnStart = null;
	private Button btnClose = null;
	int port = 9876;
	InetAddress group = null;
	MulticastSocket ms = null;
	AudioReader ar;
	AudioWriter aw;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btnStart = (Button) findViewById(R.id.btnStart);
		btnClose = (Button) findViewById(R.id.btnClose);
		btnStart.setOnClickListener(startClickListener);
		btnClose.setOnClickListener(closeClickListener);
		EnableWifiMulticast();
	}
	private void EnableWifiMulticast()
	{
		WifiManager wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);   
        multicastLock=wifiManager.createMulticastLock("multicast.test");   
        multicastLock.acquire();
	}
	private void ReleaseWifiMulticast()
	{
        multicastLock.release();
	}
	private OnClickListener startClickListener = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			JoinCreateMuticast();
			ar = new AudioReader(group,port,ms);
			ar.run();
			aw = new AudioWriter(group,port,ms);
			aw.run();
		}
		private void JoinCreateMuticast() {
			// TODO Auto-generated method stub
			try {
				ms = new MulticastSocket(port);
				ms.setLoopbackMode(true); 
//				group = InetAddress.getByName("224.5.0.7");
				group = InetAddress.getByName("224.0.0.1");
				ms.joinGroup(group);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				ReleaseWifiMulticast();
			}
		}
	};
	private OnClickListener closeClickListener = new OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			try {
				ms.leaveGroup(group);
				ReleaseWifiMulticast();
				System.exit(0);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	};
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}


package com.lovejia.WifiVoip;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;

public class AudioWriter extends Thread{
	
	private int port = 0;
	private InetAddress group = null;
	private MulticastSocket ms = null;
	private int bufferSize = 0;
	byte[] buffer;
	AudioRecord ar;
	public AudioWriter(InetAddress group,int port,MulticastSocket ms) {
		// TODO Auto-generated constructor stub
		this.group = group;
		this.port = port;
		this.ms = ms;
		initRecord();
	}
	private void initRecord()
	{
		int frequency = 11025;
		int channelConfiguration = AudioFormat.CHANNEL_IN_DEFAULT;
		int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
		
		bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration,  audioEncoding);
		ar = new AudioRecord(MediaRecorder.AudioSource.MIC,frequency, channelConfiguration,audioEncoding, bufferSize);
		buffer = new byte[bufferSize]; 
	}
	private byte[] startRecord()
	{
	    ar.startRecording();
	    ar.read(buffer, 0, bufferSize);
		return buffer;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true)
		{
			byte[] date = startRecord(); 
			DatagramPacket dp = new DatagramPacket(date, date.length,group,port);
			try {
				ms.send(dp);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

package com.lovejia.WifiVoip;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;

public class AudioReader extends Thread
{
	private int port = 0;
	private InetAddress group = null;
	private MulticastSocket ms = null;
	public AudioReader(InetAddress group,int port,MulticastSocket ms) {
		// TODO Auto-generated constructor stub
		this.port = port;
		this.group = group;
		this.ms = ms;
	}
	public void run() {
		byte[] buffer = new byte[8192];
		while(true)
		{
			DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
			try {
				ms.receive(dp);
				AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC,11025,AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT,buffer.length,AudioTrack.MODE_STREAM);
				at.play();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			String s = new String(dp.getData());
//			System.out.println(s);
		}
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值