文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-30 07:42

关注

今天小编给大家分享一下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

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

在install文件夹中的lib

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

ffmepg采用rtsp取流流程图

C++怎么使用ffmpeg实现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 <iostream>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++怎么使用ffmpeg实现rtsp取流”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯