C++怎么使用ffmpeg实现rtsp取流
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,今天小编给大家分享一下C++怎么使用ffmpeg实现rtsp取流的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,
千家信息网最后更新 2026年11月01日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 )实现代码
#includeextern "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安全错误
数据库的锁怎样保障安全
互联网科技公司
互联网加科技
北京互联网科技
易互联网科技有限公司
互联网科技公司官网
北京互联网络科技有限公司
互联网科技ppt模板
北京禾田雨橡互联网科技
沃里互联网科技
上海卓越科技 互联网
移动互联网科技股
上海宁丞科技互联网
晓花互联网科技有限公司网址
互联网科技创新的路径
朱啸虎曾投资哪些互联网科技企业
互联网与数字科技关系
上海乐五互联网科技有限公司
福仕德教育科技互联网
互联网科技创新方面的资料
科技互联网企业在行动
互联网科技海报
科技和互联网公司
腾讯阿里互联网科技
上海互联网科技有限公司
亿策互联网科技
汽车互联网创新科技园
河南猎农互联网科技有限公司
工业互联网科技成果转化
互联网公司属于科技吗
10位科技互联网大佬