opencv中的H264解码器用于实时视频传输

时间:2014-04-04 13:00:26

标签: opencv ffmpeg h.264

我正在编写一个客户端 - 服务器应用程序,它可以从基于Android的手机到服务器进行实时视频传输。从手机摄像头捕获的视频使用android提供的h264编码器进行编码,并通过UDP套接字传输。帧不是RTP封装的。我需要它来减少开销,从而减少延迟。 在接收器上,我需要解码输入的编码帧。在UDP套接字上发送的数据不仅包含编码帧,还包含与帧相关的一些其他信息作为其头部的一部分。每个帧都被编码为最终单位。

我能够从接收的数据包中检索帧作为字节数组。我可以将此字节数组保存为原始h264文件并使用vlc播放,一切正常。 但是,我需要对此框架进行一些处理,因此需要在opencv中使用它。 任何人都可以帮我解决opencv中的原始h264字节数组? 可以使用ffmpeg吗?

1 个答案:

答案 0 :(得分:0)

简短答案:ffmpeg和ffplay将直接起作用。我记得Opencv可以在这2个基础上构建。因此使用FFMEPG / FFSHOW插件转换为cv :: Mat应该不难。遵循文档

  

OpenCV可以将FFmpeg库(http://ffmpeg.org/)用作后端   记录,转换和流音频和视频。 FFMpeg是完整的   交叉引用解决方案。如果在配置时启用FFmpeg   OpenCV比CMake将下载并安装二进制文件到   OPENCV_SOURCE_CODE / 3rdparty / ffmpeg /。要在运行时使用FFMpeg,您需要   必须与您的应用程序一起部署FFMepg二进制文件。

     

https://docs.opencv.org/3.4/d0/da7/videoio_overview.html

上次,我必须使用DJI PSDK。并且它们仅允许使用H.264的UDP端口udp://192.168.5.293:23003进行流传输 因此,我编写了一个简单的ffmpeg接口以流式传输到PSDK。但是我必须事先调试它。因此,我使用ffplay来显示此网络流以证明其有效。这是显示流的脚本。因此,您必须在此之上作为opencv插件工作

ffplay -f h264 -i udp://192.168.1.45:23003