FFmpeg-chapter3-读取视频流(原理篇)
ffmpeg网站:About FFmpeg
1 库介绍
(1)libavutil是一个包含简化编程函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。
(2)libavcodec是一个包含音频/视频编解码器的解码器和编码器的库。
(3)libavformat是一个包含多媒体容器格式的拆装器和拆装器的库。
(4)libavdevice是一个包含输入和输出设备的库,用于抓取和呈现许多常见的多媒体输入/输出软件框架,包括Video4Linux、Video4Linux2、VfW和ALSA。
(5)libavfilter是一个包含媒体过滤器的库。 libswscale是一个执行高度优化的图像缩放和色彩空间/像素格式转换操作的库。
(6)libswresample是一个执行高度优化的音频重采样,重矩阵和样本格式转换操作的库。
2 实现步骤

上面是主要用到的函数
(1)av_register_all(): 注册 FFmpeg 支持的所有解码器、编码器、格式等;
(2)avformat_network_init(): 初始化网络支持(如果需要从网络流中读取数据);
调用一次即可
(3)avformat_alloc_context(): 分配一个 AVFormatContext,它是 FFmpeg 中用于管理多媒体文件或流的核心结构。返回值是一个指向 AVFormatContext 的指针。
(4)avformat_open_input(): 打开一个输入文件或流,并将其信息加载到 AVFormatContext 中。这一步会解析文件格式(如 MP4、AVI 等),并为后续的流处理做准备。
(5)avformat_find_stream_info(): 获取输入文件或流的详细信息,包括音视频流的编码格式、帧率、分辨率等。这一步会填充 AVFormatContext 中的 AVStream 信息。
(6)av_read_frame(): 从输入文件或流中读取一帧数据。每次调用 av_read_frame() 会返回一个 AVPacket,它包含了一帧的编码数据。如果读取成功,继续处理帧数据;如果读取失败或到达文件末尾,则停止。
(7)AVPacket: 包含编码的帧数据(如压缩的视频或音频数据)。AVFrame: 包含解码后的帧数据(如解压缩后的视频或音频数据)。AVPacket 需要通过解码器(如 avcodec_send_packet() 和 avcodec_receive_frame())解码为 AVFrame。
(8)avformat_close_input(): 关闭输入文件或流,并释放相关资源。这一步会释放 AVFormatContext 中的所有流信息。
(9)avformat_free_context(): 释放 AVFormatContext 及其占用的内存。
总结:
(1)初始化 FFmpeg 环境。
(2)创建并初始化 AVFormatContext。
(3)打开输入文件或流,获取流信息。
(4)循环读取帧数据(AVPacket),并通过解码器解码为 AVFrame。
(5)处理解码后的帧数据(如播放、保存等)。
(6)关闭输入流并释放资源。
3 代码
使用VS新建cmake工程实现上述步骤。
参考:
ffmpeg 4.22库文件:GitCode - 全球开发者的开源社区,开源代码托管平台
详细参考:MMAVPlayer/chapter3 at main · StudyWinter/MMAVPlayer · GitHub
相关文章:
FFmpeg-chapter3-读取视频流(原理篇)
ffmpeg网站:About FFmpeg 1 库介绍 (1)libavutil是一个包含简化编程函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 (2)libavcodec是一个包含音频/视频编解码器的解码器和编…...
机器视觉线阵相机分时频闪选型/机器视觉线阵相机分时频闪选型
在机器视觉系统中,线阵相机的分时频闪技术通过单次扫描切换不同光源或亮度,实现在一幅图像中捕捉多角度光照效果,从而提升缺陷检测效率并降低成本。以下是分时频闪线阵相机的选型要点及关键考量因素: 一、分时频闪技术的核心需求 多光源同步控制 分时频闪需相机支持多路光源…...
「Selenium+Python自动化从0到1②|2025浏览器操控7大核心API实战(附高效避坑模板))」
Python 自动化操作浏览器基础方法 在进行 Web 自动化测试时,操作浏览器是必不可少的环节。Python 结合 Selenium 提供了强大的浏览器操作功能,让我们能够轻松地控制浏览器执行各种任务。本文将详细介绍如何使用 Python 和 Selenium 操作浏览器的基本方法…...
矩阵系列 题解
1.洛谷 P1962 斐波那契数列 题意 大家都知道,斐波那契数列是满足如下性质的一个数列: F n { 1 ( n ≤ 2 ) F n − 1 F n − 2 ( n ≥ 3 ) F_n \left\{\begin{aligned} 1 \space (n \le 2) \\ F_{n-1}F_{n-2} \space (n\ge 3) \end{aligned}\right. …...
活动报名:Voice Agent 技术现状及应用展望丨 3.8 北京
「人人发言,所有人向所有人学习!」——Z 沙龙 「一起探索下一代语音驱动的人机交互界面。」——RTE 开发者社区 3 月 8 日周六下午,北京,「智谱 Z 计划&Z Fund」和「RTE 开发者社区」将合办一场 Voice Agent 主题的线下活动…...
【卡牌——二分】
题目 分析 发现答案具有二分性,果断二分答案 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 2e510;int n, a[N], li[N]; ll m;bool check(int x) {ll t m;for(int i 1; i < n; i){if(a[i] > x) continue; //…...
《第十五部分》STM32之FLASH闪存(终结篇)
本章是江科大自学STM32的最后一章节,历经2个月的断断续续时间,终于学到了最后,总结,这次的学习历程,相对于学习51还是略出一些难度,也就是若你是非科班,学习起来还是有一定的难度的,…...
属性的设置
笔记 class Student:def __init__(self, name, gender):self.name nameself.__gender gender # self.__gender 是私有的实例属性# 使用property 修改方法,将方法转成属性使用propertydef gender(self):return self.__gender# 将我们的gender这个属性设置为可写属…...
本地部署Deepseek+Cherry Studio
为啥要本地部署deepseek? 因为给deepseek发送指令得到服务器繁忙的回馈,本地部署会运行的更快 1.Ollama安装与部署 Ollama是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计 winR——cmd——ol…...
CMU15445(2023fall) Project #2 - Extendible Hash Index 匠心分析
胡未灭,鬓已秋,泪空流 此生谁料 心在天山 身老沧州 ——诉衷情 完整代码见: SnowLegend-star/CMU15445-2023fall: Having Conquered the Loftiest Peak, We Stand But a Step Away from Victory in This Stage. With unwavering determinati…...
【VSCode】VSCode下载安装与配置极简描述
VSCode 参考网址:[Visual Studio Code Guide | GZTime’s Blog]. 下载安装 下载地址:Download Visual Studio Code - Mac, Linux, Windows. 注:推荐不更改安装位置,并且在附加任务中“其他”中的四项全部勾选,即将用…...
【前端基础】Day 5 CSS浮动
目录 1. 浮动 1.1 标准流(普通流/文档流) 1.2 浮动 1.2.1 浮动的特性 1.2.2 浮动元素常和标准流父级搭配使用 1.2.3 案例 2. 常见网页布局 2.1 常见网页布局 2.2 浮动布局注意点 3. 清除浮动 3.1 原因 3.2 清除浮动的本质 3.3 清除浮动的方…...
处理DeepSeek返回的markdown文本
处理DeepSeek返回的markdown文本 markdown预览组件,支持公式显示,支持uniapp。 相关依赖 markdown-itmarkdown-it-mathjaxmarkdown-it-katexmarkdown-it-latexkatexgithub-markdown-css 组件源码 <!--* Description: markdown显示组件* Author: wa…...
互联网+房产中介+装修设计+物料市场+智能家居一体化平台需求书
一、项目概述 1.1 项目背景 随着互联网技术的飞速发展以及人们生活品质的显著提升,传统房产交易、装修设计、家居购物等领域暴露出诸多问题。信息不对称使得用户难以获取全面准确的信息,在房产交易中可能高价买入或低价卖出,装修时可能遭遇…...
Node.js定义以及性能优化
Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,广泛用于构建高性能的网络应用。以下是一些常见的 Node.js 面试题及其解答,帮助你准备面试: 1. 什么是 Node.js? Node.js 是一个基于 Chrome V8 引擎的 JavaSc…...
浅谈流媒体协议以及视频编解码
流媒体协议介绍 流媒体协议用于传输视频、音频等多媒体数据,确保数据流畅地传输到用户设备。常见的流媒体协议包括 RTMP、HLS、DASH、WebRTC 等,每种协议具有不同的特点和适用场景。 1. RTMP (Real-Time Messaging Protocol) 定义:由 Adob…...
在 Windows 上配置 Ollama 服务并开放局域网访问
为了在局域网内共享 Ollama 服务,我们需要完成以下两步: 1、设置 Ollama 的环境变量 OLLAMA_HOST,使其监听局域网的 IP 地址。 (1) 配置 Ollama 服务的监听地址 Ollama 服务使用环境变量 OLLAMA_HOST 来指定监听的地…...
【六祎 - Note】消息队列的演变,架构图;备忘录; IBM MQ,RabbitMQ,Kafka,Pulsar
IBM MQ 于 1993 年推出。它最初称为 MQSeries,2002 年更名为 WebSphere MQ。2014 年更名为 IBM MQ。IBM MQ 是一款非常成功的产品,广泛应用于金融领域。其收入在 2020 年仍达到 10 亿美元。 RabbitMQ 架构与 IBM MQ 不同,更类似于 Kafka 的…...
常见AI写作工具介绍(ChatGPT 4o、DeepClaude、Claude 3.5 Sonnet 、DeepSeek R1等)
AI写作工具介绍 1. ChatGPT-4o ChatGPT-4o是OpenAI于2024年5月发布的最新旗舰模型,相比之前的版本,它在多模态支持和实时推理能力上有了显著提升。它能够处理和理解音频、图像和文本数据,适用于复杂的图像分析、语音识别等应用场景[1]。 2…...
WPF中对滚动条进行平滑滚动
有时候我们在动态添加内容时,需要将滚动条滚动到指定内容处。 一般我们会调用ScrollViewer的ScrollToVerticalOffset(垂直方向)函数和ScrollToHorizontalOffset(水平方向)函数来控制滚动条滚动到指定位置。 正常滚动效…...
Landsat8数据EVI计算踩坑实录:从辐射定标到大气校正,你的公式真的写对了吗?
Landsat8数据EVI计算全流程避坑指南:从数据预处理到公式验证第一次用Landsat8数据计算EVI指数时,我盯着屏幕上那些超出[-1,1]范围的数值发愣——这显然不对劲。作为遥感领域最常用的植被指数之一,EVI的正常值范围应该是-1到1之间。经过整整两…...
GCN vs MLP:在Cora数据集上,图神经网络到底强在哪?(附可视化对比)
GCN与MLP在Cora数据集上的本质差异:从特征聚合到空间重构的认知升级当我们面对学术文献分类任务时,传统机器学习方法往往将每篇文献视为独立个体进行处理。这种处理方式在Cora数据集上通常只能获得约50%的分类准确率,而图卷积网络(GCN)却能轻…...
2026最新免费图片去水印保姆级教程!这5种方法一次学会,第三种零门槛秒出图
你是不是也遇到过这种情况?好不容易在小红书、抖音上刷到一张绝美壁纸,保存下来却被水印破坏了整体美感;想把博主分享的干货截图保存,结果那个半透明的Logo刚好挡在关键数据上。别急,今天这篇教程就是为你准备的。 202…...
键盘定制指南:从硬件到软件,开启实用又有趣的键盘使用体验!
引言 我钟情于键盘,因其是高效的人机交互接口,且充满“趣味”。用力敲击大按键,无需思索;体验精确组合的键盘快捷键带来的掌控感,皆是乐事。看着屏幕内容随操作而变,特别是那些契合自身工作方式的反馈&…...
py每日spider案例之某qing创网请求接口参数和响应解密(基于deepseek_v4pro)
核心代码: """ ====================================...
英语 听力 重读软件app
写一个可以读取一个pdf,或者doc 的apk。并语音播放出来。可以用语音指令或者某些在界面上的按键来控制,重复上一句,或者重复上一段,或者重复上5句,重复上10句,重复上3句。重复整个段落,重复整个章节。还有一…...
卖电子元器件怎么找客户?下游工厂在哪里
卖电子元器件找客户,本质是找用这些元器件的下游工厂——即需要采购连接器、继电器、电容、电阻、变压器等被动及结构件的整机或 PCBA 生产企业。核心难点不是"不知道哪些行业用",而是无法把这些下游工厂的名单、规模和采购联系人系统地整理出…...
AI Agent Harness多租户数据隔离
AI Agent Harness多租户数据隔离:构建企业级智能协作平台的安全基石 1. 引入与连接:从一场云端智能客服泄露事故谈起 核心概念: AI Agent(智能代理):具备自主感知、推理决策、行动执行能力的软件实体,可代表个人/组织完成特定任务,是当前大模型应用落地的核心载体 AI …...
市场有效的透明化矿场安全防护系统
在矿场作业中,安全问题一直是重中之重。近年来,矿场事故时有发生,给生命和财产带来了巨大损失。据统计,过去十年间,全球矿场事故造成的直接经济损失高达数千亿美元,伤亡人数更是数以万计。因此,…...
利用Taotoken模型广场为不同业务场景选择性价比最优的大模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken模型广场为不同业务场景选择性价比最优的大模型 在将大模型能力集成到实际业务的过程中,开发者常常面临一…...
