当前位置: 首页 > news >正文

视频播放器的技术组成

Qt视频播放器实现(目录)

什么是视频

我们这里讲的视频,通常也包括了音频。因为没有声音的画面播放几乎是不可接受的。

这样暗含了一个事实,那就是视频总是包括视频数据和音频数据两部分。

Video 表示视频;

Audio 表示音频;

视频播放器播放什么

如同本专栏介绍描述的一样,一个视频播放器通常可以播放本地的mp4等视频文件。

这些视频文件里都包括了视频数据和音频数据混在一起,但是结构化的混在一起。

而不是杂乱无章的混在一起。

早期的本地视频播放器

这是最早的视频播放器,比如 realplayer , 超级解霸。

这些播放器只能播放本地文件,主打一个格式适配的多。

rmvb, mp4, avi , mov , 等等。

现在的播放器

现在随着网络视频的普及,播放网络视频已经非常普遍。

播放网络视频通常是使用 rtmp webrtc 等视频传输协议,把服务器端的视频流拉拉取到电脑内存里,解码播放。比如抖音的客户端,YouTube网页客户端。

这些播放器不管是在浏览器里的插件,还是PC客户端的软件,都是一样的。

都是拉流解码渲染:

和早期的本地视频文件播放器一样,网络上传回来的数据包也是视频包根音频包交叉在一起的。

就像传送带上又又萝卜,又有白菜一样。

上图中,有的包里是视频数据,有的包里是音频数据。只有拿到包,拆开才知道里面到底是音频还是视频数据。

显卡GPU

将YUV数据送给GPU显卡去计算,按照对应的色彩空间解码转换为RGB数据才可以被显示器显示。

如果你的电脑没有独立显卡,那么你的电脑也一定有集成显卡。

Windows电脑,打开任务管理器,可以看到GPU利用率。这就是你电脑的显卡。

如上图所示,我的笔记本是Intel处理器,内置集成显卡有两个计算单元。

声卡

声卡不是我们的重点,因为计算量几乎都在视频数据部分。

解码器 FFmpeg

由于音视频格式五花八门,在压缩解压缩各个阶段格式又不一样。所以工作量庞大二繁琐。

这样的格式又是标准的,所以早就被大名鼎鼎的FFmpeg搞定了。

FFmpeg既可以编码也可以解码。

我们使用FFmpeg主要是用来从文件或者网络流中提取出Video 包和 Audio 包。

再利用FFmpeg将视频包解码得到H264格式,以及音频包解码得到 AAC 格式。

FFmpeg在视频播放器中的工作主要是下图中绿色部分:

播放器实现的主要工作

播放器主要的工作就是多线程处理上述各个模块的数据:

相关文章:

视频播放器的技术组成

Qt视频播放器实现(目录) 什么是视频 我们这里讲的视频,通常也包括了音频。因为没有声音的画面播放几乎是不可接受的。 这样暗含了一个事实,那就是视频总是包括视频数据和音频数据两部分。 Video 表示视频; Audio …...

Stable Diffusion 系统教程 | 强大的ControlNet 控制网

2023年的2月13日,一款名叫ControlNet的插件横空出世,AI绘画变得更加可控 ControlNet直译过来很简单,就叫做控制网,开发者是一名华裔,毕业于苏州大学,目前在斯坦福做读博士一年级,大佬大佬&…...

Hadoop-sqoop

sqoop 1. Sqoop简介及原理 简介: Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysq1.postgresql..)间进行数据的传递,可以将一个关系型数据库(例如: MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop 的HDFS中&…...

[论文阅读]YOLOV1:You Only Look Once:Unified, Real-Time Object Detection

摘要 我们提出了YOLO,一种新的目标检测方法。之前的目标检测工作重新使用分类器来执行检测。相反,我们将目标检测表述为空间分离的边界框和相关类概率的回归问题。单个神经网络在一次评估中直接从完整图像中预测边界框和类别概率。由于整个检测管道是一…...

Ubuntu 20.04 安装MySQL 8.0.34

MySQL安装 sudo wget https://cdn.mysql.com/archives/mysql-8.0/mysql-server_8.0.31-1ubuntu20.04_amd64.deb-bundle.tar下载MySQL文件。 sudo mkdir /mysql8创建目录。 sudo tar -xf mysql-server_8.0.31-1ubuntu20.04_amd64.deb-bundle.tar -C /mysql8进行解压。 需…...

MySQL 高级语句 Part1(进阶查询语句+MySQL数据库函数+连接查询)

高级语句 第一部分 一、MySQL进阶查询语句1.1 select ----显示表格中一个或数个字段的所有数据记录1.2 distinct ----不显示重复的数据记录1.3 where ----有条件查询1.4 and or ----且 或1.5 in----显示已知的值的数据记录1.6 between----显示两个值范围内的数据记录1.7 通配符…...

Rust免杀 Shellcode加载与混淆2

前言 这是半年前我学习Rust和免杀时的一些记录,最近打开知识库看到了这篇半年前的笔记,并且发现我常逛的安全社区都比较少有人分享Rust以及Rust免杀的帖子,于是想着将这篇笔记分享出来供大家参考和指正。由于我写这篇文章时也刚刚开始接触Ru…...

牛客java训练题 day1

9.24 day1 Q 1. this 指针是用来干什么的? 2.基类和派生类分别是指什么? 3.为什么方法中不能写静态变量 4. 解释一下ASCII码和ANSI码和两者的区别 5.简述j ava.io java.sql java.awt java.rmi 分别是什么类型的包 6. 看下面一段代码:…...

接口测试练习步骤

在接触接口测试过程中补了很多课, 终于有点领悟接口测试的根本; 偶是个实用派~,那么现实中没有用的东西,基本上我都不会有很大的概念; 下面给的是接口测试的统一大步骤,其实就是让我们对接口…...

Qt/C++音视频开发56-udp推流和拉流/组播和单播推流

一、前言 之前已经实现了rtsp/rtmp推流,rtsp/rtmp/hls/flv/ws-flv/webrtc等拉流,这种一般都需要依赖一个独立的流媒体服务程序,有没有一种更便捷的方式不需要这种依赖,然后又能实现推拉流呢,当然有的那就是udpp推流&a…...

人工智能轨道交通行业周刊-第61期(2023.9.18-9.24)

本期关键词:焊线机器人、智能综合运维管理系统、信号平面图、铁路部门架构、书生浦语大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通…...

for...in 和 for...of 的区别

for...in 和 for...of 都是 JavaScript 中的循环语句,但它们的作用和使用方式略有不同。 1、for..in 循环 for..in 循环用于遍历对象的可枚举属性,它会将对象的每个属性名称(或键名)作为迭代变量来遍历。 以下是 for...in 的基本语法 for (variable …...

高并发系统 - 接口幂等技术方案,高可用系统架构与技术选型

幂等概念来自于数学,在计算机科学中,幂等表示一次后、或多次请求某一资源,应该有同样的影响效果。 在业务表现上一般是同样的数据效果,下面就常用的业务场景,来聊聊幂等的技术方案。 ----------------- 数据层 ----------------- 索引与事务 根据业务需要,给表添加唯一索…...

简单的手机电脑无线传输方案@固定android生成ftp的IP地址(android@windows)

文章目录 abstractwindows浏览android文件环境准备客户端软件无线网络链接步骤其他方法 手机浏览电脑文件公网局域网everythingpython http.server 高级:固定android设备IP准备检查模块是否生效 windows 访问ftp服务器快捷方式命令行方式双击启动方式普通快捷方式映射新的网络位…...

Unity3D 检测鼠标位置的Sprite像素颜色

思路 获取鼠标所在屏幕坐标(Vector2)通过相机ScreenToWorldPoint(Vector3)转为世界坐标 (注意Vector3的z是距离相机的距离,相机需要正交)通过SpriteRenderer访问边界Bounds通过Bounds.Contain检测世界坐标是否在SpriteBounds内通过比例计算来确定在Sprite内的UV坐标…...

layui input 监听事件

//监听表单单选框复选框选择 form.on(radio, function (data) { console.log(data.value); //得到被选中的值 }); //监听表单下拉菜单选择 form.on(select, function (data) { console.log(data.value); //得到被选中的值 }); //监听表单复选框选择 …...

一致性思维链(SELF-CONSISTENCY IMPROVES CHAIN OF THOUGHT REASONING IN LANGUAGE MODELS)

概要 思维链已经在很多任务上取得了非常显著的效果,这篇论文中提出了一种 self-consistency 的算法,来代替 贪婪解码 算法。本方法通过 采样多个思维链集合,然后LLM模型生成后,选择一个最一致的答案作为最后的结果。一致性思维链…...

腾讯云16核服务器配置大全_16核CPU型号性能测评

腾讯云16核CPU服务器有哪些配置可以选择?可以选择标准型S6、标准型SA3、计算型C6或标准型S5等,目前标准型S5云服务器有优惠活动,性价比高,计算型C6云服务器16核性能更高,轻量16核32G28M带宽优惠价3468元15个月&#xf…...

HTML中Input elements should have autocomplete attributes的解决方案

kwfwservice.php:1 [DOM] Input elements should have autocomplete attributes (suggested: “current-password”): (More info: https://goo.gl/9p2vKq) <input name"password" id"password" lay-verify"required" placeholder"密码&…...

2808. 使循环数组所有元素相等的最少秒数;1015. 可被 K 整除的最小整数;1001. 网格照明

2808. 使循环数组所有元素相等的最少秒数 核心思想&#xff1a;枚举每个元素作为相等元素最多需要多少秒&#xff0c;然后维护它的最小值。最多需要多少秒是怎么计算的&#xff0c;我们可以把相等值的下标拿出来&#xff0c;然后你会发现两个相邻下标&#xff08;相邻下标只的…...

Mac mini变身Nas神器:Docker部署小雅Alist全流程(含阿里云盘Token获取避坑指南)

Mac mini 轻量化Nas改造指南&#xff1a;基于Docker的Alist部署与云盘管理实战 在数字化生活日益普及的今天&#xff0c;个人数据存储需求呈现爆发式增长。对于追求高效与简洁的技术爱好者而言&#xff0c;将闲置的Mac mini改造为轻量级Nas系统&#xff0c;不仅能够充分利用硬…...

Silvaco TCAD实战:从零搭建nmos器件全流程(附Athena操作截图)

Silvaco TCAD实战&#xff1a;从零搭建NMOS器件全流程解析 在半导体工艺仿真领域&#xff0c;掌握TCAD工具就像获得了一把打开微观世界的钥匙。作为行业标准的Silvaco TCAD套件&#xff0c;其Athena模块专门针对工艺仿真而设计&#xff0c;能够精确模拟从硅片清洗到最终器件成型…...

SiameseUIE中文-base教程:DEPLOYMENT.md文档解读与自定义扩展路径

SiameseUIE中文-base教程&#xff1a;DEPLOYMENT.md文档解读与自定义扩展路径 你是不是也遇到过这样的烦恼&#xff1f;面对一篇新闻稿&#xff0c;想快速找出里面的人名、地名和公司名&#xff0c;手动标注得眼花缭乱&#xff1b;或者分析一堆用户评论&#xff0c;想搞清楚大…...

单片机GPIO驱动能力与扩展方案详解

1. 单片机GPIO驱动能力基础解析单片机的GPIO&#xff08;通用输入输出&#xff09;端口是连接外部世界的重要接口&#xff0c;但其驱动能力往往有限。以常见的STM32系列为例&#xff0c;单个GPIO引脚的最大拉电流和灌电流通常仅为20-25mA&#xff0c;整个端口组的电流总和还有更…...

CTFHub Web技能树通关笔记:用BurpSuite和cURL实战HTTP协议五大关卡

CTFHub Web技能树通关笔记&#xff1a;用BurpSuite和cURL实战HTTP协议五大关卡 当你第一次面对CTFHub的Web技能树时&#xff0c;那些关于HTTP协议的挑战关卡可能会让你感到既兴奋又迷茫。作为Web安全的基础&#xff0c;HTTP协议的理解和工具使用能力直接决定了你能否顺利通关。…...

压缩感知基础:从稀疏信号到高效重构

1. 压缩感知是什么&#xff1f; 第一次听说"压缩感知"这个词时&#xff0c;我完全摸不着头脑。直到在研究生阶段接触到医学影像处理&#xff0c;才发现这个理论简直是个宝藏。简单来说&#xff0c;压缩感知&#xff08;Compressed Sensing, CS&#xff09;是一种颠覆…...

python namedtuple

## Python 中的 Any&#xff1a;一个被低估的类型注解工具 在 Python 的类型注解体系里&#xff0c;Any 是一个看似简单&#xff0c;却常常引发误解的特殊类型。很多开发者第一次见到它时&#xff0c;可能会觉得这不过是个“万金油”式的占位符&#xff0c;用来应付那些暂时不想…...

LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal 题解

LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal 题解 题目描述 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请构造二叉树并返回其根节点。 示例…...

DLT Viewer全景指南:汽车电子日志分析的核心功能与实战应用

DLT Viewer全景指南&#xff1a;汽车电子日志分析的核心功能与实战应用 【免费下载链接】dlt-viewer Diagnostic Log and Trace viewing program 项目地址: https://gitcode.com/gh_mirrors/dl/dlt-viewer 在汽车电子开发的复杂环境中&#xff0c;诊断日志与追踪数据如同…...

好写作AI“学术清道夫”:论文查重,为学术诚信保驾护航

在学术的浩瀚星空中&#xff0c;论文是学子们展示智慧与研究成果的璀璨星辰。然而&#xff0c;随着学术交流的日益频繁&#xff0c;论文抄袭、剽窃等不端行为也时有发生&#xff0c;这不仅损害了学术的公正性和严肃性&#xff0c;也阻碍了学术的健康发展。在这样的背景下&#…...