java:如何逐帧读取RTSP流
java: how to read RTSP stream frame by frame
出于性能原因,我放弃了 Python-Opnecv/FFmpeg 解决方案并转向 Java。
但令我惊讶的是,我找不到像 Python 中那样更好更完整的解决方案。我尝试使用 vlcj 但它又一次提供了更多的命令行界面。我找不到任何回调类型的机制来读取和分析所有帧。
我也尝试过使用 Java 套接字,但除了与 Ip Camera 流 h264[= 建立连接外,什么也做不了24=] RTSP 视频。
注意:在服务器环境中会运行宁,所以我们不想显示任何框架,我们只需要运行确定帧上的其他操作。
请指导我正确的方向。
如果您想在播放媒体时访问视频帧缓冲区,您有两种选择。
我假设您使用的是 vlcj 4.x+,它在撰写本文时是最新的。
首先,您可以使用 EmbeddedMediaPlayer
和 CallbackVideoSurface
。
您可以使用 MediaPlayerFactory
创建您的视频表面。
当您创建视频表面时,它需要您提供的 RenderCallback
实现。
正常创建嵌入式媒体播放器,并调用mediaPlayer.setVideoSurface()
设置您的视频表面。
VLC 将使用本机内存支持的 ByteBuffer
形式的原始视频帧数据回调此渲染回调实现 class。然后您可以对该字节缓冲区中的数据进行分析。
第二种方法是查看 CallbackMediaPlayerComponent
class - 这个 class 旨在让您轻松获得 out-of-the-box 可用的媒体播放器并为您提供了一种仅插入要自定义的位的方法。在这种情况下,您插入渲染回调实现来进行分析。
在 github 项目页面的 vlcj 源代码中有示例显示了所有这些。其中一个示例处理此缓冲区以将视频动态转换为灰度,但显然您可以对帧数据做任何您想做的事情。
该方法名为 "onDisplay()",但如果您只对执行一些分析感兴趣,则不必在任何地方实际显示视频。
如果您想访问视频帧数据,这就是 vlcj 可以提供的范围。
出于性能原因,我放弃了 Python-Opnecv/FFmpeg 解决方案并转向 Java。
但令我惊讶的是,我找不到像 Python 中那样更好更完整的解决方案。我尝试使用 vlcj 但它又一次提供了更多的命令行界面。我找不到任何回调类型的机制来读取和分析所有帧。
我也尝试过使用 Java 套接字,但除了与 Ip Camera 流 h264[= 建立连接外,什么也做不了24=] RTSP 视频。
注意:在服务器环境中会运行宁,所以我们不想显示任何框架,我们只需要运行确定帧上的其他操作。
请指导我正确的方向。
如果您想在播放媒体时访问视频帧缓冲区,您有两种选择。
我假设您使用的是 vlcj 4.x+,它在撰写本文时是最新的。
首先,您可以使用 EmbeddedMediaPlayer
和 CallbackVideoSurface
。
您可以使用 MediaPlayerFactory
创建您的视频表面。
当您创建视频表面时,它需要您提供的 RenderCallback
实现。
正常创建嵌入式媒体播放器,并调用mediaPlayer.setVideoSurface()
设置您的视频表面。
VLC 将使用本机内存支持的 ByteBuffer
形式的原始视频帧数据回调此渲染回调实现 class。然后您可以对该字节缓冲区中的数据进行分析。
第二种方法是查看 CallbackMediaPlayerComponent
class - 这个 class 旨在让您轻松获得 out-of-the-box 可用的媒体播放器并为您提供了一种仅插入要自定义的位的方法。在这种情况下,您插入渲染回调实现来进行分析。
在 github 项目页面的 vlcj 源代码中有示例显示了所有这些。其中一个示例处理此缓冲区以将视频动态转换为灰度,但显然您可以对帧数据做任何您想做的事情。
该方法名为 "onDisplay()",但如果您只对执行一些分析感兴趣,则不必在任何地方实际显示视频。
如果您想访问视频帧数据,这就是 vlcj 可以提供的范围。