我正在尝试使用 libjitsi 流式传输一些音频,但我无法让它工作。我在 Windows 10 上。这是我所做的:
- 克隆https://github.com/jitsi/libjitsi.git
- 作为 Maven 项目导入 Eclipse。一切都编译得很好。
- 我最终意识到(通过查看 Ant 构建文件)我需要一些本地库,所以我将这些库添加
/lib/native
到java.library.path
. - 我正在运行
AVTransmit2
和--local-port-base=5100 --remote-host=localhost --remote-port-base=5200
运行AVReceive2
。--local-port-base=5200 --remote-host=localhost --remote-port-base=5100
当我运行任一文件时,我都会收到类似的错误。首先我看到
WARNING: Failed to initialize org.jitsi.impl.neomedia.device.DirectShowSystem
java.lang.reflect.UndeclaredThrowableException
at org.jitsi.impl.neomedia.device.DeviceSystem.invokeDeviceSystemInitialize(DeviceSystem.java:441)
...
at org.jitsi.service.libjitsi.LibJitsi.getMediaService(LibJitsi.java:124)
at org.jitsi.examples.AVTransmit2.start(AVTransmit2.java:104)
at org.jitsi.examples.AVTransmit2.main(AVTransmit2.java:359)
Caused by: java.lang.UnsatisfiedLinkError: org.jitsi.impl.neomedia.codec.FFmpeg.av_get_pix_fmt(Ljava/lang/String;)I
at org.jitsi.impl.neomedia.codec.FFmpeg.av_get_pix_fmt(Native Method)
...
然后在我看到的日志中
WARNING: Failed to initialize org.jitsi.impl.neomedia.device.DirectShowSystem
java.lang.reflect.UndeclaredThrowableException
at org.jitsi.impl.neomedia.device.DeviceSystem.invokeDeviceSystemInitialize(DeviceSystem.java:441)
at org.jitsi.impl.neomedia.device.DeviceSystem.invokeDeviceSystemInitialize(DeviceSystem.java:348)
at org.jitsi.impl.neomedia.device.DeviceSystem.<init>(DeviceSystem.java:493)
at org.jitsi.impl.neomedia.device.DeviceSystem.<init>(DeviceSystem.java:475)
at org.jitsi.impl.neomedia.device.DirectShowSystem.<init>(DirectShowSystem.java:61)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at org.jitsi.impl.neomedia.device.DeviceSystem.initializeDeviceSystems(DeviceSystem.java:288)
at org.jitsi.impl.neomedia.device.DeviceSystem.initializeDeviceSystems(DeviceSystem.java:230)
at org.jitsi.impl.neomedia.MediaServiceImpl.getDevices(MediaServiceImpl.java:577)
at org.jitsi.impl.neomedia.MediaServiceImpl.getDefaultDevice(MediaServiceImpl.java:500)
at org.jitsi.examples.AVTransmit2.start(AVTransmit2.java:119)
at org.jitsi.examples.AVTransmit2.main(AVTransmit2.java:359)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.jitsi.impl.neomedia.jmfext.media.protocol.directshow.DataSource
at org.jitsi.impl.neomedia.device.DirectShowSystem.doInitialize(DirectShowSystem.java:97)
at org.jitsi.impl.neomedia.device.DeviceSystem.initialize(DeviceSystem.java:642)
at org.jitsi.impl.neomedia.device.DeviceSystem$1.run(DeviceSystem.java:393)
Exception in thread "main" java.lang.IllegalArgumentException: direction
at org.jitsi.service.neomedia.AbstractMediaStream.assertDirection(AbstractMediaStream.java:105)
at org.jitsi.impl.neomedia.MediaStreamImpl.setDirection(MediaStreamImpl.java:2831)
at org.jitsi.examples.AVTransmit2.start(AVTransmit2.java:128)
at org.jitsi.examples.AVTransmit2.main(AVTransmit2.java:359)
由于我在不满意的链接错误中看到“ffmpeg”,我尝试从https://ffmpeg.zeranoe.com/builds/win64/shared/ffmpeg-4.1-win64-shared.zip下载 ffmpeg 。我选择了“共享”的,因为它有我认为需要链接 JNI 接口的 DLL。我将 ffmpeg 安装的 bin 文件夹添加到 java.library.path,但没有任何乐趣 - 同样的错误。似乎他们的任何安装程序都没有“安装”任何东西——他们只是将文件解压缩到磁盘上。
从错误堆栈中,我猜想我错过了一些 DirectShow 所需的本机库,但我无法弄清楚它们应该是什么。
有没有人能够让这些示例运行?我需要安装什么东西才能让它工作吗?