我想使用RTP格式的JMF 2.1.1e捕获和流式传输音频.我写了一个简单的发射器,我可以发送和接收音频.但是当我在Wireshark中看到时,我看到数据包为UDP.请问有人能指出我的问题.
这是我负责音频捕获和传输的功能.
public void captureAudio(){ // Get the device list for ULAW Vector devices = captureDevices(); CaptureDeviceInfo captureDeviceInfo = null; if (devices.size() > 0) { //get the first device from the list and cast it as CaptureDeviceInfo captureDeviceInfo = (CaptureDeviceInfo) devices.firstElement(); } else { // exit if we could not find the relevant capturedevice. System.out.println("No such device found"); System.exit(-1); } Processor processor = null; try { //Create a Processor for the specified media. processor = Manager.createProcessor(captureDeviceInfo.getLocator()); } catch (IOException ex) { System.err.println(ex); } catch (NoProcessorException ex) { System.err.println(ex); } //Prepares the Processor to be programmed. //puts the Processor into the Configuring state. processor.configure(); //Wait till the Processor configured. while (processor.getState() != Processor.Configured){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } //Sets the output content-type for this Processor processor.setContentDescriptor(CONTENT_DESCRIPTOR); /** ContentDescriptor CONTENT_DESCRIPTOR = new ContentDescriptor(ContentDescriptor.RAW_RTP); */ //Gets a TrackControl for each track in the media stream. TrackControl track[] = processor.getTrackControls(); boolean encodingOk = false; //searching through tracks to get a supported audio format track. for (int i = 0; i < track.length; i++) { if (!encodingOk && track[i] instanceof FormatControl) { if (((FormatControl) track[i]).setFormat( new AudioFormat(AudioFormat.ULAW_RTP,8000,8,1) ) == null) { track[i].setEnabled(false); } else { encodingOk = true; track[i].setEnabled(encodingOk); System.out.println("enc: " + i); } } else { // we could not set this track to ULAW,so disable it track[i].setEnabled(false); } } //If we could set this track to ULAW we proceed if (encodingOk){ processor.realize(); while (processor.getState() != Processor.Realized){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } DataSource dataSource = null; try { dataSource = processor.getDataOutput(); } catch (NotRealizedError e) { e.printStackTrace(); } try { String url= "rtp://192.168.1.99:49150/audio/1"; MediaLocator m = new MediaLocator(url); DataSink d = Manager.createDataSink(dataSource,m); d.open(); d.start(); System.out.println("transmitting..."); processor.start(); } catch (Exception e) { e.printStackTrace(); } } }
请问,如果您发现任何不正确或含糊的内容.
提前致谢. 原文链接:https://www.f2er.com/java/124474.html