多路h265监控录放开发-(10)XCameraRecord类完成视频的录制

xcamera_record.h

cpp 复制代码
#pragma once
#include <string>
#include "xtools.h"
class XCameraRecord :public XThread
{
public:
    void set_rtsp_url(std::string url) { rtsp_url_ = url; }
    void set_save_path(std::string s) { save_path_ = s; }
private:
    void Main();//124
    std::string rtsp_url_;
    std::string save_path_;//存储的根目录
};

xcamera_record.cpp

cpp 复制代码
#include "xcamera_record.h"
#include "xdemux_task.h"
#include "xmux_task.h"

void XCameraRecord::Main()//124
{
    XDemuxTask demux;
    XMuxTask mux;
    if (rtsp_url_.empty())
    {
        LOGERROR("open rtsp url failed!");
        return;
    }

    //自定重连
    while (!is_exit_)
    {
        if (demux.Open(rtsp_url_)) //最坏情况阻塞1秒
        {
            break;
        }
        MSleep(10);
        continue;
    }
    //音视频参数
    auto vpara = demux.CopyVideoPara();
    if (!vpara)
    {
        LOGERROR("demux.CopyVideoPara failed!");
        //需要考虑demux 资源释放的问题
        demux.Stop();
        return;
    }
    //启动解封装线程,提前启动,防止超时
    demux.Start();

    auto apara = demux.CopyAudioPara();

    AVCodecParameters* para = nullptr;  //音频参数
    AVRational* timebase = nullptr;     //音频时间基数
    if (apara)
    {
        para = apara->para;
        timebase = apara->time_base;
    }

    if (!mux.Open(save_path_.c_str(),
        vpara->para, vpara->time_base,//视频参数
        para, timebase))            //音频参数
    {
        LOGERROR("mux.Open rtsp_url_ failed!");
        demux.Stop();
        mux.Stop();
        return;
    }
    demux.set_next(&mux);
    mux.Start();
    MSleep(3000);
    mux.Stop();
    demux.Stop();
}

主函数:

cpp 复制代码
int main(int argc, char *argv[])
{
    XCameraRecord xr;
    xr.set_rtsp_url(
        "v1080.mp4");
    xr.set_save_path("./testrecord.mp4");
    xr.Start();
}

运行结果:

录制了两个视频在当前目录下

相关推荐
三易串口屏9 小时前
音频控件使用教程
音视频·工控·串口屏·三易串口屏
皓悦编程记13 小时前
【YOLO26 系列】基于YOLO26的垃圾分类检测系统【python源码+Pyqt5界面/WEB+数据集+训练代码】
python·qt·分类
qingmiaozhuan13 小时前
电脑录屏没有声音还能补救吗?音频采集链路详解及4种技术方案
前端·电脑·音视频·开发工具·电脑录屏·电脑录屏软件
不爱记笔记14 小时前
音视频内容如何纳入Obsidian知识库?分享一套完整的输入层解决方案
人工智能·ai·chatgpt·音视频·知识库·知识管理·obsidian
小智社群15 小时前
VR漫游视频完整版
前端·javascript·音视频
音视频牛哥16 小时前
从RFC到工程落地:SmartMediaKit 低延迟RTSP播放器技术深度解析
音视频·rtsp播放器·rtsp播放器安卓端·rtspplayer·鸿蒙next rtsp播放器·rtsp播放器linux端·rtsp播放器windows端
西安老张(AIGC&ComfyUI)16 小时前
第026章:从坑里上来了!ComfyUI文生音频IndexTTS2+Qwen3-TTS本地部署!
音视频
十五年专注C++开发19 小时前
qobject_cast转换失败原因分析
c++·qt·dynamic_cast·qobject_cast
sycmancia19 小时前
Qt——线程的生命期问题
开发语言·qt
闻道且行之1 天前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr