千家信息网

C++怎么使用ffmpeg实现rtsp取流

发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,今天小编给大家分享一下C++怎么使用ffmpeg实现rtsp取流的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,
千家信息网最后更新 2025年02月19日C++怎么使用ffmpeg实现rtsp取流

今天小编给大家分享一下C++怎么使用ffmpeg实现rtsp取流的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

C++ 使用ffmpeg实现rtsp取流

flyfish

环境

Ubuntu 18.04
Qt 5.14.2
FFmpeg-n5.0.1

下载

这里选择n5.0.1版本

安装编译依赖

sudo apt-get install nasm

配置

生成包括静态和动态库
头文件和库都在当前的install文件夹中

FFmpeg-n5.0.1$  ./configure --prefix="./install"  --enable-shared

再执行

makemake install

在install文件夹中的include

在install文件夹中的lib

ffmepg采用rtsp取流流程图

CMakeLists.txt编写方法

cmake_minimum_required(VERSION 3.5)project(rtsp LANGUAGES CXX)set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON)set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(Qt5Core)set(FFMPEG_PREFIX_PATH /path/to/FFmpeg-n5.0.1/install)include_directories(    ${FFMPEG_PREFIX_PATH}/include/)link_directories(    ${FFMPEG_PREFIX_PATH}/lib/ )add_executable(rtsp  main.cpptarget_link_libraries(rtsp avcodec avformat avfilter avutil swresample swscale swscale )

实现代码

#include extern "C" {#include "libavcodec/avcodec.h"#include "libavformat/avformat.h"#include "libavutil/avutil.h"}int main(int argc, char *argv[]){    int status_error_=-1;    std::string videourl= "rtsp://admin:Admin12345@192.168.3.64:554/Streaming/Channels/1";    AVFormatContext *pFormatCtx = NULL;    AVDictionary *options = NULL;    AVPacket *av_packet = NULL; // AVPacket暂存解码之前的媒体数据    avformat_network_init();    //执行网络库的全局初始化。    //此函数仅用于解决旧版GNUTLS或OpenSSL库的线程安全问题。    //一旦删除对较旧的GNUTLS和OpenSSL库的支持,此函数将被弃用,并且此函数将不再有任何用途。    av_dict_set(&options, "buffer_size", "4096000", 0); //设置缓存大小    av_dict_set(&options, "rtsp_transport", "tcp", 0);  //以tcp的方式打开,    av_dict_set(&options, "stimeout", "5000000", 0);    //设置超时断开链接时间,单位us,   5s    av_dict_set(&options, "max_delay", "500000", 0);    //设置最大时延    pFormatCtx = avformat_alloc_context(); //用来申请AVFormatContext类型变量并初始化默认参数,申请的空间    //打开网络流或文件流    if (avformat_open_input(&pFormatCtx, videourl.c_str(), NULL, &options) != 0)    {        std::cout << "Couldn't open input stream.\n"                  << std::endl;        return status_error_;    }    //获取视频文件信息    if (avformat_find_stream_info(pFormatCtx, NULL) < 0)        std::cout << "Couldn't find stream information."<< std::endl;    std::cout << "av_dict_get:" << std::endl;    AVDictionaryEntry *tag = NULL;    //av_dict_set(&pFormatCtx->metadata, "rotate", "0", 0);这里可以设置一些属性    while ((tag = av_dict_get(pFormatCtx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))        std::string key = tag->key;        std::string value = tag->value;        std::cout << "av_dict_get:" << key << ":" << value << std::endl;    //查找码流中是否有视频流    int videoindex = -1;    unsigned i = 0;    for (i = 0; i < pFormatCtx->nb_streams; i++)        if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)        {            videoindex = i;            break;        }    if (videoindex == -1)        std::cout << "Didn't find a video stream.\n"    av_packet = (AVPacket *)av_malloc(sizeof(AVPacket));    while (true)        if (av_read_frame(pFormatCtx, av_packet) >= 0)            if (av_packet->stream_index == videoindex)            {                std::cout << "\ndata size is:" << av_packet->size;                //这里就是接收到的未解码之前的数据            }            if (av_packet != NULL)                av_packet_unref(av_packet);    av_free(av_packet);    avformat_close_input(&pFormatCtx);    return 0;

运行可执行文件前,可设置从当前文件夹查找so动态库

export LD_LIBRARY_PATH=./

结果

以上就是"C++怎么使用ffmpeg实现rtsp取流"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

文件 文件夹 知识 篇文章 C++ 函数 内容 动态 就是 数据 网络 视频 不同 很大 代码 全局 单位 参数 变量 大小 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全对抗的图片 绍兴游戏软件开发服务 危害网络安全行为技术措施 宜通世纪网络安全 唯一艺术服务器扩容纪多少量 国家电网网络安全通报批评 厂多多网络技术公司图片 手机版原神中的服务器如何更改 办公软件开发研究 net软件开发书籍推荐 北大青鸟网络技术学校快速班 ssh 测试数据库 贵州服务器数据库备份 民政部低收入数据库 武汉网络安全监察举报电话 软件开发价格公式 山西餐饮软件开发前端 浪潮服务器找不到硬盘 结构深化一体化软件开发 武汉市网络安全自查 福州市众腾网络技术有限公司 软件开发数据库是干什么用的 校园网络安全管理制度百度 开发手机系统的股票软件开发 网络安全专业大学排名及录取分 我的世界怎么给服务器做充值系统 移除并删除数据库表 dna数据库使用教程 网络安全宣传日活动视频 wegame崩坏3和哪个服务器互通
0