首先,我想指出的是,没有多少示例如何从摄像机读取rtsp流。
到目前为止,由于存在许多问题,我使用vlcj进行rtsp流读取工作非常困难。
首先要创建读取rtsp流的应用程序,我需要在版本2.1.2 中下载VLC,这对我而言很重要。接下来,这将添加两个依赖项
版本3.9.0 中的vlcj库:
<dependency>
<groupId>uk.co.caprica</groupId>
<artifactId>vlcj</artifactId>
<version>3.9.0</version>
</dependency>
然后我不得不将JNA版本降级为版本3.5.2 ,因此:
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.5.2</version>
</dependency>
通过这种配置,我设法使用以下代码读取rtsp流:
public static void main(final String[] args) {
/* import .dll libraries */
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
/* rtsp stream url */
String mrl = "rtsp://192.168.1.1:5555/h264";
String[] options = { ":network-caching=400" };
/* getting MediaPlayer */
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory(args);
HeadlessMediaPlayer mediaPlayer = mediaPlayerFactory.newHeadlessMediaPlayer();
mediaPlayer.playMedia(mrl, options);
/* infinite loop keeping stream reading alive */
while (true) {
}
}
到目前为止,我仅使用简单的HeadlessMediaPlayer
进行测试。
我遇到的问题是相机和视频流之间的巨大延迟,因为这大约是1秒,这不好。使用VLC,我可以将延迟设置为300-500ms,这确实不错,但是正如您在此处String[] options = {":network-caching=400"};
所看到的那样,我的缓存设置为400。但这并没有太大变化。流有太大的延迟。
有人解决了吗?
另一个问题是有关将此rtsp流转换为http流,以便也许我可以在JavaFX中使用它,因为有一个媒体播放器,但它不支持rtsp流,仅支持HTTP。
答案 0 :(得分:0)
使用这些开关/选项并不总是很清楚或一致。
您应该始终启用并检查本机日志,以查看是否实际应用了该选项。
您可以尝试:
jit
有时,这些选项在playMedia调用中可以使用,但有时必须在创建MediaPlayerFactory时将其设置。
此外,一般来讲,请勿使用if
之类的紧密循环,而应使用String[] options = {"--network-caching", "400"};
。