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

FFmpeg5.0源碼閱讀—— av_read_frame

這篇具有很好參考價(jià)值的文章主要介紹了FFmpeg5.0源碼閱讀—— av_read_frame。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??摘要:本文主要描述了FFmpeg中用于打開編解碼器接口av_read_frame的具體調(diào)用流程,詳細(xì)描述了該接口被調(diào)用時(shí)所作的具體工作。
??關(guān)鍵字ffmpeg、av_read_frame
??讀者須知:讀者需要了解FFmpeg的基本使用流程,以及一些FFmpeg的基本常識(shí),了解FFmpegIO相關(guān)的內(nèi)容,以及大致的解碼流程。
??使用FFmpeg解碼視頻時(shí)需要主動(dòng)打開解碼器獲得解碼器相關(guān)的Context,然后直接調(diào)用av_read_frame讀取AVPacket碼流數(shù)據(jù)送到FFmpeg中進(jìn)行解碼即可。本文主要通過源碼了解FFmpeg搜索和打開解碼器的基本實(shí)現(xiàn)原理和FFmpeg具體的解碼流程。

2 av_read_frame

FFmpeg5.0源碼閱讀—— av_read_frame,ffmpeg,音視頻,ffmpeg

??av_read_frame用于從已經(jīng)打開的文件中讀取未經(jīng)過解碼的碼流AVPacket,對(duì)于視頻幀就是一幀的壓縮幀,對(duì)于音頻幀如果音頻是固定大小的話則可以是多幀,否則也是一幀。av_read_frame內(nèi)部讀取碼流時(shí)調(diào)用avpriv_packet_list_getav_read_frame_internal。
??avpriv_packet_list_get比較簡(jiǎn)單就是從當(dāng)前媒體的PackList中取出一幀。av_read_frame的函數(shù)實(shí)現(xiàn)比較長(zhǎng),其大致流程為:

  1. 調(diào)用ff_read_packet讀取一幀碼流;
  2. 如果1步驟失敗則調(diào)用parse_packet刷新解析器,否則繼續(xù)到步驟3;
  3. 如果當(dāng)前context需要更新解碼器context,則將internal的解碼器context更新到stream的解碼器context;
  4. 如果成功拿到預(yù)期的幀則下一步,否則跳轉(zhuǎn)到步驟1;
  5. 后續(xù)的工作就是解析元數(shù)據(jù),計(jì)算需要丟棄的數(shù)據(jù)大小等。

??ff_read_packet會(huì)先檢查緩沖區(qū)是否有幀沒有的話就會(huì)調(diào)用s->iformat->read_packet即對(duì)應(yīng)個(gè)是的解析碼流的函數(shù)進(jìn)行解碼。每個(gè)FFmpeg支持的格式都有一個(gè)FormatContext描述對(duì)應(yīng)格式的信息以及解析對(duì)應(yīng)格式的函數(shù)指針,比如下面是mov的格式描述:

static const AVClass mov_class = {
    .class_name = "mov,mp4,m4a,3gp,3g2,mj2",
    .item_name  = av_default_item_name,
    .option     = mov_options,
    .version    = LIBAVUTIL_VERSION_INT,
};

const AVInputFormat ff_mov_demuxer = {
    .name           = "mov,mp4,m4a,3gp,3g2,mj2",
    .long_name      = NULL_IF_CONFIG_SMALL("QuickTime / MOV"),
    .priv_class     = &mov_class,
    .priv_data_size = sizeof(MOVContext),
    .extensions     = "mov,mp4,m4a,3gp,3g2,mj2,psp,m4b,ism,ismv,isma,f4v",
    .flags_internal = FF_FMT_INIT_CLEANUP,
    .read_probe     = mov_probe,
    .read_header    = mov_read_header,
    .read_packet    = mov_read_packet,
    .read_close     = mov_read_close,
    .read_seek      = mov_read_seek,
    .flags          = AVFMT_NO_BYTE_SEEK | AVFMT_SEEK_TO_PTS,
};

??從上面的過程能夠看出av_read_frame完全是同步的操作,可能是比較耗時(shí)的,因?yàn)槿绻恢蹦貌坏綆蜁?huì)一直遍歷當(dāng)前媒體文件的buffer,因此一般建議開一個(gè)線程讀取Packet。文章來源地址http://www.zghlxwxcb.cn/news/detail-559925.html

到了這里,關(guān)于FFmpeg5.0源碼閱讀—— av_read_frame的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • FFmpeg5.0源碼閱讀——FFmpeg大體框架(以GIF轉(zhuǎn)碼為示例)

    FFmpeg5.0源碼閱讀——FFmpeg大體框架(以GIF轉(zhuǎn)碼為示例)

    ?? 摘要 :前一段時(shí)間熟悉了下FFmpeg主流程源碼實(shí)現(xiàn),對(duì)FFmpeg的整體框架有了個(gè)大概的認(rèn)識(shí),因此在此做一個(gè)筆記,希望以比較容易理解的文字描述FFmpeg本身的結(jié)構(gòu),加深對(duì)FFmpeg的框架進(jìn)行梳理加深理解,如果文章中有紕漏或者錯(cuò)誤歡迎指出。本文描述了FFmpeg編解碼框架的

    2024年02月10日
    瀏覽(23)
  • FFmpeg5.0源碼閱讀——avformat_open_input

    FFmpeg5.0源碼閱讀——avformat_open_input

    ?? 摘要 :本文主要描述了FFmpeg中用于打開文件接口 avformat_open_input 的具體調(diào)用流程,詳細(xì)描述了該接口被調(diào)用時(shí)所作的具體工作。 ?? : ffmpeg 、 avformat_open_input ?? 注意 :讀者需要了解FFmpeg的基本使用流程,以及一些FFmpeg的基本常識(shí),了解FFmpegIO相關(guān)的內(nèi)容,

    2024年02月11日
    瀏覽(18)
  • FFmpeg5.0源碼閱讀—— avcodec_send_frame && avcodec_receive_packet

    FFmpeg5.0源碼閱讀—— avcodec_send_frame && avcodec_receive_packet

    ?? 摘要 :本文主要描述了FFmpeg中用于編碼的接口的具體調(diào)用流程,詳細(xì)描述了該接口被調(diào)用時(shí)所作的具體工作。 ?? : ffmpeg 、 avcodec_send_frame 、 avcodec_receive_packet ?? 讀者須知 :讀者需要了解FFmpeg的基本使用流程,以及一些FFmpeg的基本常識(shí),了解FFmpegIO相關(guān)的內(nèi)

    2024年02月16日
    瀏覽(22)
  • 【Android音視頻】MacOS上FFmpeg5.0.1編譯

    【Android音視頻】MacOS上FFmpeg5.0.1編譯

    1. FFmpeg官網(wǎng)下載鏈接(推薦下載release的版本): Download FFmpeg http://ffmpeg.org/download.html#releases ?盡情去下載并開始編譯吧 2. 下載壓縮包,解壓至自己想要的文件路徑下即可。個(gè)人習(xí)慣用全英文路徑,避免出現(xiàn)奇怪的問題。 3. Android Studio請(qǐng)預(yù)先下載好。點(diǎn)擊AS右上角“SDK Manager”

    2024年02月02日
    瀏覽(29)
  • 三.ffmpeg 集成av1

    三.ffmpeg 集成av1

    copy from zhujiamin 一、介紹 FFmpeg4.2支持AV1、AVS2等視頻編碼格式,但本身并不包含解碼器,需要自己集成。集成的編解碼器要避開GPL開源協(xié)議(–enable-gpl),因此不能用x264、AVS2等編解碼器 我在研究FFmpeg升級(jí)時(shí),尋找能提升多媒體系統(tǒng)表現(xiàn)力的新特性,發(fā)現(xiàn)FFmpeg支持的基于BSD協(xié)

    2023年04月24日
    瀏覽(18)
  • ffmpeg中的avs解碼器綜述

    ffmpeg中的avs解碼器綜述

    最近拿了一個(gè)avs的視頻流,用硬件可以解碼,但是ffmpeg自帶的卻無法解碼。 所以研究了一下,首先看ffmpeg的avs解碼器: 可以看到avs有兩個(gè),第一個(gè)是avs 第二個(gè)是cavs. 我們先用avs來解碼,解碼的視頻是通過【 avs編碼器 】編碼的: 結(jié)果發(fā)現(xiàn)有問題,尺寸本來是640 360,結(jié)果被強(qiáng)

    2024年02月08日
    瀏覽(24)
  • FFmpeg5.1.3編譯動(dòng)態(tài)庫踩坑之旅(基于Linux虛擬機(jī))

    FFmpeg5.1.3編譯動(dòng)態(tài)庫踩坑之旅(基于Linux虛擬機(jī))

    環(huán)境準(zhǔn)備 1.Windows安裝Oracle VM VirtualBox 7.0.10,安裝ubuntu-22.04.3。 坑一 :無法往虛擬機(jī)里拖放復(fù)制文件,解決辦法:登錄Ubuntu虛擬機(jī)時(shí)切換到xorg方式登錄,參考地址:Ubuntu Desktop 22.04 無法實(shí)現(xiàn)拖放復(fù)制操作解決辦法-CSDN博客 下載文件 下載ndk25 官網(wǎng)下載:ndk官網(wǎng) 網(wǎng)盤下載:andr

    2024年02月07日
    瀏覽(66)
  • ffmpeg 中 av_log 是怎樣工作的?

    ---------------------------------------- author: hjjdebug date:?? 2023年 07月 27日 星期四 14:56:38 CST descriptor: ffmpeg 中 av_log 是怎樣工作的? ---------------------------------------- av_log 功能其實(shí)只是添加了顏色,LOG級(jí)別,及l(fā)og上下文名稱,沒有添加時(shí)間,函數(shù)名稱,行號(hào)等信息. 就這一點(diǎn)就引起了血雨腥風(fēng)的

    2024年02月15日
    瀏覽(15)
  • ffmpeg av_parser_parse2函數(shù)分析各種碼流測(cè)試程序

    ffmpeg av_parser_parse2函數(shù)分析各種碼流測(cè)試程序 ---------------------------------------- author: hjjdebug date: 2023年 07月 14日 星期五 16:14:05 CST date: 曾更新過... ---------------------------------------- 測(cè)試程序見后, 可編譯運(yùn)行(ffmpeg v4.4) 我需要一個(gè)簡(jiǎn)單的程序,實(shí)現(xiàn)能跟入ffmpeg 庫.了解av_parser_parse2的工

    2024年02月16日
    瀏覽(18)
  • 音視頻從入門到精通——FFmpeg之a(chǎn)v_image_get_buffer_size函數(shù)

    函數(shù)的作用是通過指定像素格式、圖像寬、圖像高來計(jì)算所需的內(nèi)存大小 重點(diǎn)說明一個(gè)參數(shù)align:此參數(shù)是設(shè)定內(nèi)存對(duì)齊的對(duì)齊數(shù),也就是按多大的字節(jié)進(jìn)行內(nèi)存對(duì)齊。比如設(shè)置為1,表示按1字節(jié)對(duì)齊,那么得到的結(jié)果就是與實(shí)際的內(nèi)存大小一樣。再比如設(shè)置為4,表示按4字節(jié)

    2023年04月15日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包