使用vlcj的Java rtsp流读取

时间:2018-12-07 15:33:37

标签: java rtsp vlcj

首先,我想指出的是,没有多少示例如何从摄像机读取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。

1 个答案:

答案 0 :(得分:0)

使用这些开关/选项并不总是很清楚或一致。

您应该始终启用并检查本机日志,以查看是否实际应用了该选项。

您可以尝试:

jit

有时,这些选项在playMedia调用中可以使用,但有时必须在创建MediaPlayerFactory时将其设置。

此外,一般来讲,请勿使用if之类的紧密循环,而应使用String[] options = {"--network-caching", "400"};