欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++使用ffmpeg實現rtsp取流的代碼

 更新時間:2022年04月21日 15:45:43   作者:TheOldManAndTheSea  
這篇文章主要介紹了C++使用ffmpeg實現rtsp取流,文章介紹了ffmepg采用rtsp取流流程圖,CMakeLists.txt編寫方法,通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下

C++ 使用ffmpeg實現rtsp取流

flyfish

環(huán)境

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

配置

生成包括靜態(tài)和動態(tài)庫
頭文件和庫都在當前的install文件夾中

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

再執(zhí)行

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();
    //執(zhí)行網絡庫的全局初始化。
    //此函數僅用于解決舊版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;

運行可執(zhí)行文件前,可設置從當前文件夾查找so動態(tài)庫

export LD_LIBRARY_PATH=./

結果

在這里插入圖片描述

到此這篇關于C++使用ffmpeg實現rtsp取流的文章就介紹到這了,更多相關C++ rtsp取流內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 用標準c++實現string與各種類型之間的轉換

    用標準c++實現string與各種類型之間的轉換

    這個類在頭文件中定義, < sstream>庫定義了三種類:istringstream、ostringstream和stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。另外,每個類都有一個對應的寬字符集版本
    2013-09-09
  • C++發(fā)送郵件實現代碼

    C++發(fā)送郵件實現代碼

    這篇文章主要為大家詳細介紹了C++發(fā)送郵件的實現代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • c++實現十進制轉換成16進制示例

    c++實現十進制轉換成16進制示例

    這篇文章主要介紹了c++實現十進制轉換成16進制示例,需要的朋友可以參考下
    2014-05-05
  • C語言中幾種常量的認識和理解

    C語言中幾種常量的認識和理解

    這篇文章主要為大家介紹了C語言常量的認識和理解,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Qt?多語言程序設計的實現

    Qt?多語言程序設計的實現

    本文主要介紹了Qt?多語言程序設計的實現,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • c++優(yōu)先隊列用法知識點總結

    c++優(yōu)先隊列用法知識點總結

    在本篇文章里小編給大家整理的是關于c++優(yōu)先隊列用法知識點總結內容,需要的朋友可以參考學習下。
    2020-02-02
  • 淺談C語言中的注釋風格小結

    淺談C語言中的注釋風格小結

    今天小編就為大家分享一篇淺談C語言中的注釋風格小結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++ new與malloc和delete及free動態(tài)內存管理及區(qū)別介紹

    C++ new與malloc和delete及free動態(tài)內存管理及區(qū)別介紹

    這篇文章主要介紹了深入理解C++中的new/delete和malloc/free動態(tài)內存管理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 詳解C/C++中低耦合代碼的設計實現

    詳解C/C++中低耦合代碼的設計實現

    這篇文章主要為大家詳細介紹了C/C++?相關低耦合代碼的設計實現,文中的示例代碼講解詳細,對我們學習C++有一定的幫助,感興趣的小伙伴可以了解一下
    2023-01-01
  • 如何理解C++指針常量和常量指針

    如何理解C++指針常量和常量指針

    這篇文章主要介紹了如何理解C++指針常量和常量指針,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06

最新評論