java:如何逐帧读取RTSP流

时间:2019-05-21 15:57:38

标签: java rtsp-client

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

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

我还尝试使用Java套接字,但除了通过RTSP与 Ip Camera 流式传输 h264 视频建立联系外,无能为力。

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

请朝正确的方向引导我。

1 个答案:

答案 0 :(得分:1)

如果要在播放媒体时访问视频帧缓冲区,则有两种选择。

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

首先,您可以将EmbeddedMediaPlayerCallbackVideoSurface一起使用。

您可以使用MediaPlayerFactory来创建视频界面。

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

正常创建嵌入式媒体播放器,然后调用mediaPlayer.setVideoSurface()设置视频界面。

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

第二种方法是查看CallbackMediaPlayerComponent类-该类旨在使您非常容易获得开箱即用的工作媒体播放器,并为您提供了一种插入方式仅在您要自定义的位中。在这种情况下,您可以插入渲染回调实现以进行分析。

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

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

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