Multimedia-播放器-架构2

目录

引言

问题1:

数据缓冲区 + 多线程模型

缓冲区的特点:

点播和直播场景中的缓冲区:

问题2:

同步方式

同步实现过程


引言

上一篇梳理了播放器的基本工作与处理流程,本片内容主要梳理一下其中会遇到的问题?

设计和实现一个播放器需要包含功能接口?

问题1:

按照基本流程,可以采用单线程进行串行处理。这里面的环节比较多,当中的任何一个环节出现一些异常,都会体现在整个处理流程上。单个线程处理的时候,会有网络延迟,处理延迟等因素,必然让CPU在延迟的时候无任务可做,只能待机等待任务,这样就会导致CPU的使用效率大大降低。有什么解决方案吗?

解决方案:数据缓冲区 + 多线程模型

数据缓冲区 + 多线程模型

多线程是并发并行工作的,显然提高了CPU的利用率,提高了整体效率。

然而,多个线程的工作结果怎么实现需要的串行化的处理的效果呢?

答案是通过缓冲区的管控来实现。回顾一下处理流程与多线程模型:

对于解码线程和渲染线程而言,直接使用的数据就是缓冲区的数据,当有网络抖动等,读文件线程没有数据源数据时,还可以依靠缓冲区的数据正常运行,待异常恢复后又可以继续进行数据缓冲。这就是抵御网络延迟,编解码延迟的基本原理。

假设没有这些缓冲区的话,那么这几个线程就无法并行工作了。还是跟单线程一样串行等待。有了缓冲区,对于各个线程而言,直接使用的数据还是缓冲区的数据,所以只要缓冲区有数据,线程就可以开工正常处理自己的工作。还是回到上面的问题,这缓冲区是怎么协同工作,以满足到各个线程数据需求的呢?就是生产者-消费者的模式来实现的。具体生产者-消费者的设计模式后续再补上。

小结一下多线程 的方案因为多线程并行执行可以解决了处理效率问题,而我们整个数据流处理流程是串行的。那么采用了缓冲区队列的方式,就可以让并行处理生产结果 提供给 每个串行处理节点进行消费。这么说来缓冲区支撑了播放器的多线程处理实现,同时也有效解决了网络抖动,解码抖动的问题。

缓冲区的特点:

1)缓冲区越大 -> 抗抖动能力越强

2)缓冲区越大 -> 内存占用越高

3)缓冲区越大 -> 播放延时越大

点播和直播场景中的缓冲区:

在点播场景中,用户希望画质音质有更好的体验,所以缓冲区可以设置大一些。

在直播场景中,用户希望流畅的音视频更重要,所以需要尽量减小延迟,这样就可以对相关的缓冲区配置小一些。或者调整一下水位以使实时性更好。

问题2:

播放时,音频和视频的同步是怎么做到的呢?

音画同步是指播放器正在渲染的每一帧画面和正在播放的每一段声音都是严格对应起来的,不存在人耳和肉眼可以分辨出来的偏差。

首先梳理一下几个音视频相关的概念:

视频帧:视频帧可以简单理解为一帧对应的是一幅图像

音频帧:音频帧的概念和视频帧的概念不一样,音频帧对应声波截取(采样)的一段波形。
帧大小/采样率 = 一帧的时长

DTS:解码时间戳
PTS:显示时间戳
GOP: Group of pictures图片组,以 I 帧为起始点,其他为 P 帧和 B 帧
IDR:GOP的第一帧

对于用网络传输音视频流媒体的数据的方式而言,都是经过编码压缩才能让数据量变小,更容易传播,然后传播到客户端后经过解压缩编码出音频帧和视频帧数据后,再进行播放。

音视频同步就是针对时间戳来进行同步的。

具体的同步原理先不细说了。

同步方式

包括三种:

1)视频同步音频
2)音频同步视频
3)音视频同步外部时钟

由于人耳对声音的敏感度较人眼对图像的敏感度强,所以一般会让视频来配合音频。声音快了图像补偿,声音慢了图像丢弃。

同步实现过程

同步大概实现过程:
1)获取音视频两个相关指标:音频采样率,视频帧率
2)计算音频和视频的每帧播放时长:音频每帧持续时间(ms)= 每帧采样数(帧大小) / 采样率 *1000;视频每帧持续时间(ms) = 1000/帧率
3)调整音视频实现同步:调整到音频和视频每帧播放速度基本相等

https://blog.csdn.net/melody157398/article/details/112855633
https://tencentcloud.csdn.net/64d9f4b19ce083432426a546.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/67042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何高性能、高效率地实现3D Web轻量化?

随着互联网和Web技术的发展,3D Web应用的需求越来越多。然而,复杂的3D模型在Web上展示 和交互通常需要大量的带宽和计算资源。 为了解决这一问题,HOOPS技术作为一套专业的3D图形技术开发工具包,发挥着关键作用。本文 将探讨HOO…

pytest---添加自定义命令行参数(pytest_addoption )

前言 在目前互联网公司中,都会存在多个测试环境,那么当我们编写的自动化想要在多套测试环境下进行运行时,如何使用?大多数人想到的可能是通过将我们自动化代码中的地址修改成不同环境,但是这时候就会增加一些工作量&am…

【数据库】通过实例讲清楚,Mongodb的增删查改,分组查询,聚合查询aggregate

目录 一.基础概念 二.数据库的管理 1.创建数据库 2.删除数据库 二.集合的管理 1.显示所有集合 2.创建集合 3.删除当前集合 4.向集合中插入元素 三.文档的管理 1.文档插入 2.文档的更新 3.文档的删除 4.文档查询 (1)查询基本语法&#xff1…

【python爬虫】14.Scrapy框架讲解

文章目录 前言Scrapy是什么Scrapy的结构Scrapy的工作原理 Scrapy的用法明确目标与分析过程代码实现——创建项目代码实现——编辑爬虫代码实现——定义数据代码实操——设置代码实操——运行 复习 前言 前两关,我们学习了能提升爬虫速度的进阶知识——协程&#xf…

【JAVA】多态

作者主页:paper jie_的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和…

开源django+mysql+vue3前后端分离商城baykeShop使用指南

baykeShop开源商城系统 项目简介 baykeShop(拜客商城系统)是一款全开源Python栈商城系统,管理后台完全前后端分离重写以适配项目,前后端100%开源,后台前端采用开源SCUI开源库对接开发,美观、易用、符合当…

【广州华锐互动】数字孪生智慧楼宇3D可视化系统:掌握实时运行状态,优化运营管理

在过去的几年中,科技的发展极大地改变了我们的生活和工作方式。其中,三维数据可视化技术的出现,为我们提供了全新的理解和观察世界的方式。特别是在建筑行业,数字孪生智慧楼宇3D可视化系统的出现,让我们有机会重新定义…

面试题 ⑤

1、TCP与UDP的区别 UDPTCP是否连接无连接,即刻传输面向连接,三次握手是否可靠不可靠传输,网络波动拥堵也不会减缓传输可靠传输,使用流量控制和拥塞控制连接对象个数支持一对一,一对多,多对一和多对多交互通…

排序算法问题

给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 代码如下: 1.插入排序(简…

【VM】保姆级VM算法平台二次开发之-环境配置

VM算法平台二次开发 1.下载Visual Studio 20222.项目的创建 C# 应用3.设置属性,去掉属选型32位4. 进行引用的导入工作5. 重新加载,查看引用6. 工具箱添加Dll的依赖。(只需要加载一次就行) 1.下载Visual Studio 2022 可以直接在官…

python中super()用法

super关键字的用法 一、概述二、作用三、语法四、使用示例1.通过super() 来调用父类的__init__ 构造方法:2.通过supper() 来调用与子类同名的父类方法2.1 单继承2.2 多继承 一、概述 super() 是python 中调用父类(超类)的一种方法&#xff0…

R语言+Meta分析;论文新方向

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

如何使用ArcGIS Earth制作地图动画视频

通常情况下,我们所看到的地图都是静态展示,对于信息的传递,视频比图片肯定会更加丰富,所以制作地图动画视频更加有利于信息的传递,这里我们讲解一下ArcGIS Earth 2.0如何制作地图动画视频,希望能对你有所帮…

3.2.0 终极预告!云原生支持新增 Spark on k8S 支持

视频贡献者 | 王维饶 视频制作者 | 聂同学 编辑整理 | Debra Chen Apache DolphinScheduler 3.2.0 版本将发布,为了让大家提前了解到此版本更新的主要内容,我们已经制作了几期视频和内容做了大致介绍,包括《重磅预告!Apache Dol…

AI:04-基于机器学习的蘑菇分类

蘑菇是一类广泛分布的真菌,其中许多种类具有重要的食用和药用价值,但也存在着一些有毒蘑菇。因此,准确地区分可食用和有毒的蘑菇对于保障人们的食品安全和健康至关重要。本研究旨在基于机器学习技术开发一种蘑菇分类系统,以实现对蘑菇的自动分类和识别。通过构建合适的数据…

springboot基础(79):通过pdf模板生成文件

文章目录 前言通过pdf模板生成文件一 . 制作模板二、编辑代码实现模板生成pdf文件三、pdf在线预览和文件下载 扩展问题遇到的问题1. 更换字体为宋体常规2. 下载时中文文件名乱码问题 前言 通过pdf模板生成文件。 支持文本,图片,勾选框。 本章代码已分享…

17.Oauth2-微服务认证

1.Oauth2 OAuth 2.0授权框架支持第三方支持访问有限的HTTP服务,通过在资源所有者和HTTP服务之间进行一个批准交互来代表资源者去访问这些资源,或者通过允许第三方应用程序以自己的名义获取访问权限。 为了方便理解,可以想象OAuth2.0就是在用…

实现 Entity实例生命周期和vue组件生命周期融合

场景解决方案实现方案index.vue方案解决效果 场景 ceisum中Entity实例的生成和销毁,大部分逻辑和vue代码分离,导致不好阅读和维护 解决方案 ceisum 中实例 Entity 的生命周期,和vue的生命周期’相似’,把两个生命周期结合(把en…

Jmete+Grafana+Prometheus+Influxdb+Nginx+Docker架构搭建压测体系/监控体系/实时压测数据展示平台+遇到问题总结

背景 需要大批量压测时,单机发出的压力能力有限,需要多台jmeter来同时进行压测;发压机资源不够,被压测系统没到瓶颈之前,发压机难免先发生资源不足的情形;反复压测时候也需要在不同机器中启动压测脚本&…

比较opencv,pillow,matplotlib,skimage读取图像的速度比

上面这些库都被广泛用于图像处理和计算机视觉任务; 不同的图像读取库(OpenCV,Pillow,matplotlib和skimage)的读取速度,是怎么样的一个情况? 下面分别从读取速度,以及转换到RGB通道…