gpt4 book ai didi

java - 在 FMJ 中找不到捕获设备

转载 作者:行者123 更新时间:2023-11-30 11:45:53 24 4
gpt4 key购买 nike

之前我一直在使用 JMF,但是需要安装 JMF,但我不想增加这个开销。这就是我想转到 FMJ 的原因。 FMJ 是开源的。 :)

FMJ 源代码给出了一些示例。还有一个 FMJStudio,我可以从那里运行和传输从麦克风捕获的 RTP 音频。

但是当我想使用下面的源传输 RTP 时,它找不到任何捕获设备。

完整的源代码可以在:fmj-20070928-0938_2.zip 中找到 FMJ而这个源类的类名是SimpleVoiceTransmiter

    //final String urlStr = URLUtils.createUrlStr(new File("samplemedia/gulp2.wav"));//"file://samplemedia/gulp2.wav";
Format format;

format = new AudioFormat(AudioFormat.ULAW_RTP, 8000, 8, 1);
//format = new AudioFormat(AudioFormat.ULAW_RTP, 8000.0, 8, 1, AudioFormat.LITTLE_ENDIAN, AudioFormat.SIGNED);
//format = new AudioFormat(BonusAudioFormatEncodings.ALAW_RTP, 8000, 8, 1);
//format = new AudioFormat(BonusAudioFormatEncodings.SPEEX_RTP, 8000, 8, 1, -1, AudioFormat.SIGNED);
//format = new AudioFormat(BonusAudioFormatEncodings.ILBC_RTP, 8000.0, 16, 1, AudioFormat.LITTLE_ENDIAN, AudioFormat.SIGNED);

CaptureDeviceInfo di = null;
//Set to true if you want to transmit audio from capture device, like microphone.
if (true)
{
// First find a capture device that will capture linear audio
// data at 8bit 8Khz
AudioFormat captureFormat = new AudioFormat(AudioFormat.LINEAR, 8000, 8, 1);

Vector devices = CaptureDeviceManager.getDeviceList(captureFormat);



if (devices.size() > 0)
{
di = (CaptureDeviceInfo) devices.elementAt(0);
} else
{
System.err.println("No capture devices");
// exit if we could not find the relevant capturedevice.
System.exit(-1);

}
}

// Create a processor for this capturedevice & exit if we
// cannot create it
Processor processor = null;
try
{
//processor = Manager.createProcessor(new MediaLocator(urlStr));
processor = Manager.createProcessor(di.getLocator());
} catch (IOException e)
{
e.printStackTrace();
System.exit(-1);
} catch (NoProcessorException e)
{
e.printStackTrace();
System.exit(-1);
}

// configure the processor
processor.configure();

while (processor.getState() != Processor.Configured)
{
try
{
Thread.sleep(10);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

processor.setContentDescriptor(new ContentDescriptor(ContentDescriptor.RAW_RTP));

TrackControl track[] = processor.getTrackControls();

boolean encodingOk = false;

// Go through the tracks and try to program one of them to
// output g.711 data.

for (int i = 0; i < track.length; i++)
{
if (!encodingOk && track[i] instanceof FormatControl)
{
if (((FormatControl) track[i]).setFormat(format) == null)
{

track[i].setEnabled(false);
} else
{
encodingOk = true;
}
} else
{
// we could not set this track to g.711, so disable it
track[i].setEnabled(false);
}
}

// At this point, we have determined where we can send out
// g.711 data or not.
// realize the processor
if (encodingOk)
{
if (!new net.sf.fmj.ejmf.toolkit.util.StateWaiter(processor).blockingRealize())
{
System.err.println("Failed to realize");
return;
}

// get the output datasource of the processor and exit
// if we fail
DataSource ds = null;

try
{
ds = processor.getDataOutput();
} catch (NotRealizedError e)
{
e.printStackTrace();
System.exit(-1);
}

// hand this datasource to manager for creating an RTP
// datasink our RTP datasink will multicast the audio
try
{
String url = "rtp://192.168.1.99:49150/audio/1";

MediaLocator m = new MediaLocator(url);

DataSink d = Manager.createDataSink(ds, m);
d.open();
d.start();

System.out.println("Starting processor");
processor.start();
Thread.sleep(30000);
} catch (Exception e)
{
e.printStackTrace();
System.exit(-1);
}
}

当我运行这个源时,输出是:No capture devices

可能是什么问题? :-(

编辑:我从系统中卸载了 JMF

最佳答案

好吧,过了两天半,摸不着头脑,我自己指出了问题。

问题是,当我卸载 JMF 时,它并未从 CLASSPATH 用户变量中删除。有这样的东西:

  "C:\PROGRA~1\JMF21~1.1E\lib\sound.jar;C:\PROGRA~1\JMF21~1.1E\lib\jmf.jar;C:\PROGRA~1\JMF21~1.1E\lib;"

当我删除它们并重新启动计算机时。然后宾果游戏。代码运行没有任何问题。 :)

关于java - 在 FMJ 中找不到捕获设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com