gpt4 book ai didi

java:如何逐帧读取RTSP流

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

出于性能原因,我放弃了 Python-Opnecv/FFmpeg 解决方案并转向 Java。

但令我惊讶的是,我无法找到像 Python 那样更好、更完整的解决方案。我尝试使用 vlcj 但它再次提供了更多命令行类型的界面。我无法找到任何回调类型的机制来读取和分析所有帧。

我也尝试过使用 Java Sockets,但除了与通过 RTSP 传输 h264 视频的 Ip Camera 建立连接之外,什么也做不了。

注意:它将在服务器环境中运行,因此我们不想显示任何框架,我们只需要在框架上运行某些其他操作。

请引导我走向正确的方向。

最佳答案

如果您想在媒体播放时访问视频帧缓冲区,您有几个选择。

我假设您使用的是 vlcj 4.x+,这是撰写本文时的最新版本。

首先,您可以使用EmbeddedMediaPlayerCallbackVideoSurface .

您可以使用MediaPlayerFactory创建您的视频表面。

当您创建视频表面时,它需要 RenderCallback您提供的实现。

正常创建嵌入式媒体播放器,并调用mediaPlayer.setVideoSurface()设置您的视频表面。

正是这个渲染回调实现类将被VLC以ByteBuffer形式的原始视频帧数据回调。由 native 内存支持。然后您可以对此字节缓冲区中的数据进行分析。

第二种方法是查看 CallbackMediaPlayerComponent类 - 此类旨在让您轻松获得开箱即用的工作媒体播放器,并为您提供一种仅插入您想要自定义的位的方法。在这种情况下,您可以插入渲染回调实现来进行分析。

github 项目页面上的 vlcj 源代码中有示例显示了所有这些。其中一个示例处理此缓冲区以将视频动态转换为灰度,但显然您可以对帧数据执行任何您想要的操作。

该方法名为“onDisplay()”,但如果您只想执行一些分析,则不必在任何地方实际显示视频。

如果您想访问视频帧数据,这就是 vlcj 可以提供的范围。

关于java:如何逐帧读取RTSP流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56242164/

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