首先,我想指出的是,如何从摄像机中读取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。
我遇到的问题是相机和我的流之间有很大的延迟,因为它大约是1s,这不是很好。使用VLC,我可以将延迟设置为300-500 is,这真的很好,但是正如您在这里看到的,String[] options = {":network-caching=400"};将我的缓存设置为400。但变化不大。流有太大的延迟。有人修好了吗?
另一个问题是如何将这个rtsp流转换为HTTP流,所以也许我可以在JavaFX中使用它,因为有一个媒体播放器,但是它不支持rtsp流,只支持http。
发布于 2018-12-23 11:13:33
如何使用这些开关/选项并不总是明确或一致的。
您应该始终启用并检查本机日志,以查看是否实际应用了该选项。
你可以试试:
String[] options = {"--network-caching", "400"};
有时,这些选项将在playMedia调用上工作,但其他时候必须在创建MediaPlayerFactory时设置它们。
而且,通常情况下,不要使用像while(true)这样的紧循环,而是使用Thread.currentThread().join()。
https://stackoverflow.com/questions/53672542
复制相似问题