广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++使用ffmpeg实现rtsp取流的代码
  • 334
分享到

C++使用ffmpeg实现rtsp取流的代码

2024-04-02 19:04:59 334人浏览 独家记忆
摘要

目录c++ 使用FFmpeg实现rtsp取流环境下载安装编译依赖配置ffmepg采用rtsp取流流程图CMakeLists.txt编写方法实现代码C++ 使用ffmpeg实现rtsp

C++ 使用ffmpeg实现rtsp取流

flyfish

环境

ubuntu 18.04
Qt 5.14.2
FFmpeg-n5.0.1

下载

https://git.ffmpeg.org/ffmpeg.git
Https://GitHub.com/FFmpeg/FFmpeg

这里选择n5.0.1版本

安装编译依赖

sudo apt-get install nasm

配置

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

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

再执行

make
make 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.cpp
target_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++ rtsp取流内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++使用ffmpeg实现rtsp取流的代码

本文链接: https://www.lsjlt.com/news/146811.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++使用ffmpeg实现rtsp取流的代码
    目录C++ 使用ffmpeg实现rtsp取流环境下载安装编译依赖配置ffmepg采用rtsp取流流程图CMakeLists.txt编写方法实现代码C++ 使用ffmpeg实现rtsp...
    99+
    2022-11-13
  • C++怎么使用ffmpeg实现rtsp取流
    今天小编给大家分享一下C++怎么使用ffmpeg实现rtsp取流的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。C++ 使用f...
    99+
    2023-06-30
  • C#wpf使用ffmpeg命令行实现录屏的示例代码
    目录前言一、主要步骤1、使用 AllowsTransparency实现穿透框2、获取音频设备名称3、命令行启动ffmpeg4、使用JobObject管理子进程二、完整代码三、效果预览...
    99+
    2022-11-13
    C# wpf ffmpeg命令行录屏 C# wpf 录屏
  • C++中使用FFmpeg适配自定义编码器的实现方法
    目录1 编码流程1.1 整体流程1.2 内部流程2 适配接口2.1 init、close2.2 option2.3 receive2.4 encode2.5 零拷贝的设计1 编码流程...
    99+
    2023-05-16
    C++ FFmpeg适配编码器 C++ FFmpeg自定义编码器
  • C/C++实现获取系统时间的示例代码
    目录概述示例易用性封装概述 C 标准库提供了 time() 函数与 localtime() 函数可以获取到当前系统的日历时间,但 time() 函数精度只能到秒级,如果需要更高精度的...
    99+
    2022-12-20
    C++获取系统时间 C++ 系统时间 C++获取时间
  • C++代码调用C#代码的过程怎么实现
    这篇文章主要讲解了“C++代码调用C#代码的过程怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++代码调用C#代码的过程怎么实现”吧!首先建立一个C#工程Class Library...
    99+
    2023-06-17
  • SQLSERVER调用C#的代码实现
    简单例子 首先写一段简单的 C# 代码,然后把它编译成 dll。 namespace Bussiness { public class UserFunctions { public sta...
    99+
    2023-01-30
    SQLSERVER调用C#
  • 使用Golang和FFmpeg实现视频转码的技巧
    使用Golang和FFmpeg实现视频转码可以通过调用FFmpeg的命令行工具来实现。下面是一些技巧和步骤:1. 安装FFmpeg:...
    99+
    2023-10-09
    Golang
  • C语言实现通讯录功能的流程与代码
    用C语言制作一个拥有添加,删除,查找,修改,排序,清空,打印功能的通讯录 用分模块的方法来实现这个通讯录,函数的声明,类型的声明放在一个.h文件中,函数的实现放在一个.c文件中,在主...
    99+
    2022-11-13
  • android使用IJKPlayer播放视频流的实现代码
    最近在做音视频相关的内容,这就无法避开视屏采集和播放的问题了,然后播放器使用的是 ijkplayer,这个东西使用 url 播放倒是没啥问题,只是我们的方案是接收 flv 的视...
    99+
    2022-06-07
    ijkplayer Android
  • C#/VB.NET实现从PPT中提取图片的示例代码
    目录程序环境从整个演示文稿中提取图像完整代码效果图从特定演示幻灯片中提取图像完整代码效果图PowerPoint是用于制作幻灯片(演示文稿)的应用软件,每张幻灯片中都可以包含文字、图形...
    99+
    2023-03-14
    C#实现PPT提取图片 C# PPT提取图片 C# PPT 图片
  • Linux中rm命令使用以及C/C++代码实现
    目录前言Linux rm 命令如何使用 rm 命令删除文件如何强制 rm 忽略不存在的文件如何在每次删除之前使 rm 提示如何使用 rm 命令删除目录如何让 rm 只删除空目录如何强...
    99+
    2022-11-13
  • Linux中rm命令使用及C/C++代码实现的方法
    本篇内容介绍了“Linux中rm命令使用及C/C++代码实现的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言rm 命令是 Unix/...
    99+
    2023-06-30
  • 使用c++实现异或加密的代码示例
    目录加密原理异或加密的实现ShellCode 编写注意事项加密原理 由于展示最基本最简单的实现,使用算法加密就没用复杂的。如果使用比较复杂的加密,首先你在C++代码层面和汇编层面要有...
    99+
    2022-11-13
  • 使用SQL实现车流量的计算的示例代码
    目录卡口转换率1、查出每个地区下每个路段下的车流量2、通过错位连接获取每辆车的行车记录3、获取行车过程中的车辆数4、获取每个卡口的总车辆数5、求出卡口之间的转换率卡口转换率 将数据导...
    99+
    2022-11-13
  • JNI实现最简单的JAVA调用C/C++代码
    JNI,是Java Native Interface的简称,中文是“Java本地调用”。通过这种技术可以做到以下两点: Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。 Native程序...
    99+
    2023-05-31
    java jni ava
  • C语言实现链表与文件存取的示例代码
    目录此处为main函数的内容一、输入数据到链表中二、把链表数据存入文件三、输出文件完整代码本程序主要功能是建立链表,然后把链表数据存储到文件中,然后把文件数据存储到数组中并输出。 不...
    99+
    2022-11-13
  • 如何使用C++代码实现双向链表
    这篇文章主要介绍“如何使用C++代码实现双向链表”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用C++代码实现双向链表”文章能帮助大家解决问题。双向链表:两个指针域,一个指向前结点,一个指向后...
    99+
    2023-06-30
  • Springboot使用redis实现接口Api限流的示例代码
    前言 该篇介绍的内容如题,就是利用redis实现接口的限流(  某时间范围内 最大的访问次数 ) 。 正文  惯例,先看下我们的实战目录结构: 首先...
    99+
    2022-11-13
  • C++ 容器适配器priority_queue的使用及实现代码
    优先级队列(Priority Queue) 队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素。但是,许多应用需要另一种队列,每次从队列中取出的应是具有最...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作