[英]How to send audio stream via UDP in java?
我有一個問題,我已將MediaLocator設置為麥克風輸入,然后創建了播放器。 我需要從麥克風中獲取聲音,將其編碼為較低質量的流,並通過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之間的聯系。 基本上,我需要獲得聲音形式播放器,並以某種方式將其轉換為bytes [],因此我可以將其作為數據報發送。 有任何想法嗎? 一切都是可以接受的,只要它有效:)
你不是這里的Player類,你想使用javax.sound.sampled中的類。 據我所知,播放器是播放聲音,而不是訪問其內容。
我沒有對此進行過測試,但是嘗試在要創建的TargetDataLine上使用.read來填充緩沖區,然后將緩沖區發送到其他主機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.