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

标签 opencv ffmpeg h.264

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

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

最佳答案

简短的回答:ffmpeg 和 ffplay 将直接工作。我记得 Opencv 可以建立在这 2 个之上。所以使用 FFMEPG/FFSHOW 插件转换为 cv::Mat 应该不难。遵循文档

OpenCV can use the FFmpeg library (http://ffmpeg.org/) as backend to record, convert and stream audio and video. FFMpeg is a complete, cross-reference solution. If you enable FFmpeg while configuring OpenCV than CMake will download and install the binaries in OPENCV_SOURCE_CODE/3rdparty/ffmpeg/. To use FFMpeg at runtime, you must deploy the FFMepg binaries with your application.

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



上次我要玩 DJI PSDK。他们只允许在 UDP 端口 udp://192.168.5.293:23003 使用 H.264 进行流式传输
所以我写了一个简单的ffmpeg接口(interface)来流式传输到PSDK。但我必须事先调试它。所以我使用 ffplay 来显示这个网络流以证明它正在工作。这是显示流的脚本。所以你必须在此基础上工作才能作为 opencv 插件工作
ffplay -f h264 -i udp://192.168.1.45:23003 

关于opencv - opencv中的H264解码器用于实时视频传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863586/

相关文章:

macos - 如何使用透明背景对视频进行编码

python - 如何使用带有 Stitcher 类的 opencv python 从无人机拼接图像

c++ - 语法高亮 VS2012 C++ 和 OpenCV,库

c++ - 我的GPU加速的opencv代码比普通的opencv慢

javascript - 在 ffmpeg AWS Lambda 层中使用 ffprobe 输出文件详细信息

c# - 解析 avcC 盒内 SPS 的计时信息时出现问题

opencv - 对象跟踪openCV,问题,建议?

ffmpeg - webm破折号编码......什么是正确的ffmpeg参数?

javascript - Discord Bot 不播放音频 discord.js v13

ffmpeg - 在分段 MP4 中运行的轨道是否必须以关键帧开始?