문제가 있습니다. MediaLocator를 마이크 입력으로 설정 한 다음 Player를 생성했습니다. 마이크에서 해당 사운드를 가져 와서 일부 저품질 스트림으로 인코딩하고 UDP를 통해 데이터 그램 패킷으로 보내야합니다. 나 송신자에서이 플레이어를 듣고있다, 나는 수신기 클래스를 실행할 때 발생자바에서 UDP를 통해 오디오 스트림을 보내는 방법은 무엇입니까?
public class AudioSender extends Thread {
private MediaLocator ml = new MediaLocator("javasound://44100");
private DatagramSocket socket;
private boolean transmitting;
private Player player;
TargetDataLine mic;
byte[] buffer;
private AudioFormat format;
private DatagramSocket datagramSocket(){
try {
return new DatagramSocket();
} catch (SocketException ex) {
return null;
}
}
private void startMic() {
try {
format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 8000.0F, 16, 2, 4, 8000.0F, true);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
mic = (TargetDataLine) AudioSystem.getLine(info);
mic.open(format);
mic.start();
buffer = new byte[1024];
} catch (LineUnavailableException ex) {
Logger.getLogger(AudioSender.class.getName()).log(Level.SEVERE, null, ex);
}
}
private Player createPlayer() {
try {
return Manager.createRealizedPlayer(ml);
} catch (IOException ex) {
return null;
} catch (NoPlayerException ex) {
return null;
} catch (CannotRealizeException ex) {
return null;
}
}
private void send() {
try {
mic.read(buffer, 0, 1024);
DatagramPacket packet =
new DatagramPacket(
buffer, buffer.length, InetAddress.getByName(Util.getRemoteIP()), 91);
socket.send(packet);
} catch (IOException ex) {
Logger.getLogger(AudioSender.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
player = createPlayer();
player.start();
socket = datagramSocket();
transmitting = true;
startMic();
while (transmitting) {
send();
}
}
public static void main(String[] args) {
AudioSender as = new AudioSender();
as.start();
}
}
그리고 유일한 : 여기에 내가 온라인의 대부분을 발견하고 내 응용 프로그램에 적응 코드입니다 수업. 그리고 TargetDataLine과 Player 사이의 연결을 볼 수 없습니다. 기본적으로 사운드 양식 플레이어를 가져와 어떻게 든 그것을 바이트 []로 변환해야하므로 데이터 그램으로 보낼 수 있습니다. 아이디어가 있으십니까? 모든 것이 작동하는 한 허용됩니다.
플레이어 대신 싱크를 사용해야합니다 ... –