国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt基于FFmpeg解碼本地視頻生成H264文件并播放

這篇具有很好參考價值的文章主要介紹了Qt基于FFmpeg解碼本地視頻生成H264文件并播放。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、獲取并寫入H264碼流數(shù)據的步驟:

Qt基于FFmpeg解碼本地視頻生成H264文件并播放

二、實現(xiàn)效果:

用eseye_u.exe打開H264文件并播放

Qt基于FFmpeg解碼本地視頻生成H264文件并播放

本文福利, 免費領取C++音視頻學習資料包、技術視頻,內容包括(音視頻開發(fā),面試題,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs↓↓↓↓↓↓見下面↓↓文章底部點擊免費領取↓↓?文章來源地址http://www.zghlxwxcb.cn/news/detail-416022.html

三、核心代碼:?

 
 
    /*1、注冊*/
    av_register_all();//
 
 
    //參數(shù):1雙指針定義一顆星*,2要打開流的路徑(文件名)
    //AVFormatContext保存視頻(視頻流)相關信息的結構體
    AVFormatContext  * formatContent = avformat_alloc_context();
    char * filename="Warcraft3_End.avi";
    /*2、打開視頻文件*/
    int res = avformat_open_input(&formatContent,filename,nullptr,nullptr);
    if(res!=0)
    {
        qDebug()<<"打開視頻失敗";
        return ;
    }
    /*3、打開成功之后相關的結構體信息放在了formatContent里面,進行獲取視頻文件信息*/
    //3.1先看有沒有視頻流信息(avformat_find_stream_info),進行判斷的原因是有可能打開普通文件
    res = avformat_find_stream_info(formatContent,nullptr);
    if(res<0)
    {
        qDebug()<<"打開流媒體信息";
        return ;
    }
 
 
    //AVFormatContext(含有解碼器的id,去streams的流數(shù)組里面找視頻流)->AVStream->AVCodecContext
    //->codec(有解碼器的AVCodec)->AVCodec(含有編解碼器的id、類型)
                //AVCodecContext 保存視頻音頻編解碼相關的信息
 
    int videoType = -1;
    //3.2一個視頻中有多股碼流(用循環(huán)),存在AVFormatContext的streams數(shù)組中
    for(int i=0;i<formatContent->nb_streams;i++)
    {
        if(formatContent->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)//streams->有AVStream結構體,AVStream->codec
        {
            //找到視頻流(只有一個)
            videoType = i;//標識視頻流這個類型
            break;
        }
    }
    if(videoType == -1)
    {
        qDebug()<<"沒有找到視頻流相關信息";
        return;
    }
            //對視頻的編碼只有編碼器是不夠的還要有寬高格式等
    //3.3編碼器對應的上下文對象結構體,存儲編碼器以及寬高格式等
    AVCodecContext *codec = formatContent->streams[videoType]->codec;
    /*4、有視頻流,則查找對應視頻流的解碼器*/
    AVCodec *decoder = avcodec_find_decoder(codec->codec_id);//需要解碼器的id
    if(decoder ==nullptr)
    {
        qDebug()<<"沒有找到對應的解碼器";
        return;
    }
 
    /*5、找到解碼器后打開解碼器*/
    //參數(shù):1.初始化的上下文對象 2.打開的解碼器 3.類似目錄的東西(沒有)
    res = avcodec_open2(codec,decoder,nullptr);
    if(res!=0)
    {
        qDebug()<<"解碼器打開失敗";
        return;
    }
    /*6、獲取到的每一幀碼流(視頻流)數(shù)據寫到文件中(FILE結構體)*/
    /*6.1*/
    FILE *fp = fopen("saveH264.h264","wb+");
    AVPacket *pkt=nullptr;//pkt這時沒有指向,要我們給他分配內存空間,希望把讀出來的數(shù)據放到這塊內存去
    pkt = (AVPacket *)malloc(sizeof(AVPacket));
    //碼流數(shù)據是存到buffer里面,也需要我們動態(tài)開空間(AVBufferRef *buf;)
    //開空間不知道一幀的碼流數(shù)據是多少?其實編解碼器告訴了寬高,以此可以計算出給碼流數(shù)據開多大空間
    int bufSize = codec->width*codec->height;//計算一幀(圖)數(shù)據的大小
    av_new_packet(pkt,bufSize);
 
    //一幀一幀讀[av_read_frame](循環(huán))
    //參數(shù):1最初保存信息的結構體 2包
 
    while(av_read_frame(formatContent,pkt) == 0)//成功讀到了數(shù)據
    {
        /*6.2AVPacket->AVStream,要判斷讀到的每一幀的碼流數(shù)據是不是視頻流*/
        if(pkt->stream_index == videoType)
        {
            //是視頻流則寫到文件中
            fwrite(pkt->data,pkt->size,1,fp);//每次寫一個結構體
        }
        //每次都存在同一塊內存空間里,要清空上一次的操作
        av_packet_unref(pkt);//不是free
    }
 
    qDebug()<<"保存碼流數(shù)據成功";
    fclose(fp);
 
 

main中創(chuàng)建對象即可測試:fdecode code;

如果你對音視頻開發(fā)感興趣,覺得文章對您有幫助,別忘了點贊、收藏哦!或者對本文的一些闡述有自己的看法,有任何問題,歡迎在下方評論區(qū)與我討論!

本文福利, 免費領取C++音視頻學習資料包、技術視頻,內容包括(音視頻開發(fā),面試題,FFmpeg ,webRTC rtmp ,hls rtsp ,ffplay srs↓↓↓↓↓↓見下面↓↓文章底部點擊免費領取↓↓?

到了這里,關于Qt基于FFmpeg解碼本地視頻生成H264文件并播放的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 音視頻處理 ffmpeg中級開發(fā) H264編碼

    音視頻處理 ffmpeg中級開發(fā) H264編碼

    libavcodec/avcodec.h 常用的數(shù)據結構 AVCodec 編碼器結構體 AVCodecContext 編碼器上下文 AVFrame 解碼后的幀 結構體內存的分配和釋放 av_frame_alloc 申請 av_frame_free() 釋放 avcodec_alloc_context3() 創(chuàng)建編碼器上下文 avcodec_free_context() 釋放編碼器上下文 解碼步驟 avcodec_find_decoder 查找解碼器 avcod

    2024年02月01日
    瀏覽(109)
  • ffmpeg學習日記604-指令-將視頻格式轉為H264格式

    ffmpeg學習日記604-指令-將視頻格式轉為H264格式 在第四篇中,想要解碼視頻,缺沒有弄清楚怎樣的一個數(shù)據流,現(xiàn)在又明晰了一點,所謂的h264編解碼,并不是直接將視頻格式,通過h264編解碼為視頻原始數(shù)據流,這種說法是錯誤的,而是應該將視頻格式轉換為h264的數(shù)據流,然后

    2024年02月11日
    瀏覽(20)
  • 【Qt+FFmpeg】鼠標滾輪放大、縮小、移動——解碼播放本地視頻(三)

    【Qt+FFmpeg】鼠標滾輪放大、縮小、移動——解碼播放本地視頻(三)

    ?上一期我們實現(xiàn)了播放、暫停、重播、倍速功能,這期來談談如何實現(xiàn)鼠標滾輪放大縮小和移動;如果還沒看過上期,請移步 【Qt+FFmpeg】解碼播放本地視頻(一)_logani的博客-CSDN博客【Qt+FFmpeg】解碼播放本地視頻(二)——實現(xiàn)播放、暫停、重播、倍速功能_logani的博客-C

    2024年02月10日
    瀏覽(19)
  • 【音視頻處理】轉編碼H264 to H265,F(xiàn)Fmpeg,代碼分享講解

    【音視頻處理】轉編碼H264 to H265,F(xiàn)Fmpeg,代碼分享講解

    大家好,歡迎來到停止重構的頻道。 本期我們討論音視頻文件 轉編碼 ,如將視頻H264轉H265等。 內容中所提及的 代碼都會放在GitHub ,感興趣的小伙伴可以到GitHub下載。 我們按這樣的順序展開討論:? 1、??編碼的作用? 2、??轉編碼的工作原理 3、??編解碼器安裝? 4、??示

    2024年02月11日
    瀏覽(26)
  • 關于Ubuntu python程序利用lixb264生成h264格式的視頻相關問題

    從官網下載:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/ 安裝包頁面上的nasm-2.13.03.tar.bz2 x264庫下載地址:http://www.videolan.org/developers/x264.html 下載 x264-master.tar.bz2 利用命令 x264 --version 查看是否配置成功 從官網下載ffmpeg ffmpeg-snapshot.tar.bz2 sudo ldconfig 若轉出視頻為h.264格式則說明成功

    2023年04月08日
    瀏覽(59)
  • Android MediaCodec將h264實時視頻流數(shù)據解碼為yuv,并轉換yuv的顏色格式為nv21

    初始化mediacodec 處理數(shù)據,解碼h264數(shù)據為yuv格式 這里傳入的是h264格式的實時視頻流數(shù)據。 處理獲取到的nv21顏色格式的yuv數(shù)據 ?yuv視頻數(shù)據顏色格式轉換 h264實時視頻流的數(shù)據來源 寫入h264視頻流到sdcard中 rtsp獲取h264實時視頻流數(shù)據 ?編寫C代碼加載ffmpeg庫 源碼地址 https://gi

    2024年01月17日
    瀏覽(30)
  • Linux Qt5.15.2 編譯QWebEngine源碼支持音視頻H264

    Linux Qt5.15.2 編譯QWebEngine源碼支持音視頻H264

    默認自帶的QWebEngine 因版權問題不支持音視頻功能,需要自己編譯源碼以支持。 平臺:Linux(UOS V20 1050) Qt:5.15.2 下載 Qt 5.15.2 對應版本源碼,使用鏡像網站或者Qt Maintenance Tool工具下載。 配置 Qt 環(huán)境變量 將以下內容追加到bashrc文件后 刷新使其生效 這個階段可以預先安裝所

    2024年02月05日
    瀏覽(50)
  • FFmpeg 解碼 H.264 視頻出現(xiàn)花屏和馬賽克的解決辦法

    FFmpeg 解碼 H.264 視頻出現(xiàn)花屏和馬賽克的解決辦法

    發(fā)送數(shù)據包太大,超過了 FFmpeg 的默認最大值。 網絡情況較差時,因網絡狀況出現(xiàn)的丟包。 解碼出錯。 包亂序。 一種方法是控制播放源的發(fā)送數(shù)據大小,但這極大浪費了當前的網絡帶寬,非優(yōu)選方案。 更好的做法是擴大接收端的接收緩沖區(qū),其修改方法為: 在 FFmpeg 的源碼

    2024年04月26日
    瀏覽(29)
  • FFmpeg4入門13:h264編碼為mp4

    上一篇將yuv源視頻文件編碼為 *.h264 的由libx264實現(xiàn)壓縮的文件,將源文件從55M編碼為620KB,但是h264文件只有視頻數(shù)據,而且使用范圍不太廣。那么就需要進一步的封裝,在此選用最常用的mp4格式為例。 隨便選一個mp4格式文件,用FFmpeg4入門4:解析視頻并輸出視頻信息或者ffp

    2023年04月10日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包