OpenCv + ffmpeg + rtmp 实现摄像头采集数据直播功能

该博客介绍了如何利用OpenCV在Android平台上获取BGR格式的图像数据,然后转换为YUV格式,并通过ffmpeg将处理后的视频流编码为h264,最终推送到rtmp服务器进行直播。文中提到了使用的ffmpeg版本为2.8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采用OpenCv获取图像数据,通过ffmpeg推流给rtmp服务器

OpenCV获取的图像数据为BGR格式,需要转换成YUV格式,再将其编码为h264格式,通过ffmpeg推流

ps:ffmpeg版本是2.8

头文件

extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavdevice/avdevice.h>
#include <libavformat/avformat.h>
#include <libavutil/mathematics.h>
#include <libavutil/opt.h>
#include <libavutil/time.h>
#include <libavutil/timestamp.h>
#include <libswscale/swscale.h>
}

主要实现

  //nginx-rtmp 直播服务器rtmp推流URL
    char *outUrl = "rtmp://localhost:6666/live/Cam";

    //注册所有的编解码器
    avcodec_register_all();

    //注册所有的封装器
    av_register_all();

    //注册所有网络协议
    avformat_network_init();

    Mat orgFrame;

    //像素格式转换上下文
    SwsContext *vsc = NULL;

    //输出的数据结构
    AVFrame *yuv = NULL;

    //编码器上下文
    AVCodecContext *avctx = NULL;

    //rtmp flv 封装器
    AVFormatContext *ofmt_ctx = NULL;

    if(m_cap) //VideoCapture* m_cap;
    {
        if(m_cap->isOpened() == false)
        {
            bool ret = m_cap->open(0);

            if(ret == false && QFile::exists(DEFAULT_CAMERA_DEV))
            {
                ret = m_cap->open(DEFAULT_CAMERA_DEV);
            }

//            if(ret)
            //            {
            //                m_cap->set(CV_CAP_PROP_FRAME_WIDTH, 640);
            //                m_cap->set(CV_CAP_PROP_FRAME_HEIGHT, 480);
            //                m_cap->set(CV_CAP_PROP_FPS, 30);
            //            }
        }
    }
    else
        return -1;
    int framecnt = 0;

    i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值