极简接入|七牛云 QPlayer2 播放器再升级

news2024/11/15 7:13:20

1877 年,爱迪生发明留声机,用锡箔筒捕捉了第一缕声波。随后,黑胶唱片、磁带录音机、八轨盒式磁带机、卡式磁带、激光唱片(CD)等相继问世。

每一次介质的变革,都带来了音质的提升和便捷性的增强。时光流转,进入 21 世纪,数字音频播放器和流媒体服务的兴起,彻底改变了人们享受音频和视频的方式。

这个时代,播放体验已成为衡量产品质量的关键。影响这一体验的两大核心因素——网络传输质量与播放器性能。播放器是离用户最近的一端,一个优秀的播放器 SDK 对提升播放体验来说事半功倍。

播放器属于音视频闭环中不可或缺的一环,七牛云作为国内领先的一站式场景化智能音视频 APaaS 服务商,在音视频领域拥有多年的技术积累。继推出开源播放器 QPlayer1 后,七牛云启动了 QPlayer2 播放器的自研工作,同时,QPlayer2 播放器也可以和七牛云其他产品进行组合,形成一套开之即用的解决方案,如视频直播/点播方案。

关于 QPlayer2

七牛云 QPlayer2 是一款面向未来的跨平台播放器 SDK,除了基本的播放能力外,还引入目前最前沿的技术能力,同时在用户的接入上,提供了扩展插件,让客户能更便捷的实现播放器上层的相关业务逻辑。除了常规的 iOS/Android/Windows 端 SDK,目前也推出了适配鸿蒙 HarmonyOS NEXT preview 版(注:preview 版为预览版,仅支持部分功能,其他功能将陆续开放)。

QPlayer2 核心能力

QPlayer2 提供了基础的播放能力,包括但不限于:

媒体资源组成形式:一个媒体资源支持多 url,比如一个音频 url 和一个视频 url 组成一个媒体资源,提升拉流速度和解封装速度。

播放协议和视频类型:支持 http/https/rtmp/srt 等多样的播放协议,以及 flv、m3u8、mp4、flac、wav 等多种视频类型。

多种解码方式:除了软解/硬解/自动解码方式外,新增混解方式,提升硬解首帧速度。

变速播放:支持在变速播放时保持音调恒定。

清晰度无缝切换:提供通用的清晰度切换方案,即便在 Gop 未对齐的状况下也能够实现无缝转换。

精准 seek 和关键帧 seek:支持基于时间的精准 seek 操作以及基于关键帧的 seek 功能。

指定起播位置:准许从指定的位置开启播放进程。

起播方式设置:能够选择起播播放或者起播暂停,起播后首帧渲染出来就停止画面。

预加载:预先加载点播视频,增进首帧的体验效果。

SEI 数据回调:所有解码方式都支持。

纯音频/视频播放:支持仅有单音频流或者单视频流的视频播放。

APM 埋点上报:用于整体大盘的性能监测。

截图:支持截图操作并能自动转换为 JPEG 格式,利于展示或存储。

静音:提供针对视频的静音功能,且不影响系统声音。

此外,音频和视频处理环节通过 PerTransformer 和 CanvasRender 模块实现了预处理和渲染的灵活性,能够应对包括色盲模式、VR 视频播放等在内的多种视觉处理需求。

QPlayer2 架构设计

好的架构设计可以让产品的工程更加灵活、可维护、易读。这些特点最终会体现在产品的稳定性、灵活性、易用性上。

QPlayer2 的架构设计注重模块化和可扩展性,采用功能点扩展槽,在拉流、解封装、解码、音频处理、视频渲染等环节能灵活添加新功能。架构中,数据流向清晰,从输入流到渲染输出,每个模块都有明确的职责。例如,解码器可扩展以支持新格式,音频和视频预处理模块允许添加特殊效果。

QPlayer2-core 类集中管理所有功能,简化播放器实例管理,让开发者专注于业务逻辑开发。


QPlayer2 接入成本

QPlayer2 最少仅需 10 行代码即可完成基本的播放器布局和功能实现。同时,QPlayer2 还提供了统一的播放器接口,简化了开发者的学习过程,实现接入成本的优化。

音视频技术的革新从未停止,未来播放器会怎样演进,值得期待。

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

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

相关文章

LLM概念梳理(一):训练流程之PT、SFT和PO

一个LLM的成功问世,一般分为:预训练 PT监督微调 SFT偏好优化 PO。 预训练(Pre-Training)是为了让模型学习通用知识,而监督微调(Supervised Fine-Tuning)是为了优化模型在特定任务上的表现。为了…

TypeScript学习笔记1---认识ts与js的异同、ts的所有数据类型详解

前言:去年做过几个vue3js的项目,当时考虑到时间问题,js更加熟悉,学习成本低一点,所以只去了解了vue3。最近这段时间补了一下ts的知识点,现今终于有空来码文章了,做个学习总结,方便以…

360驱动大师 v2.0.0.2040 最新免费精简单文件版

360驱动大师是一款专注于驱动安装和更新的专业软件,它拥有庞大的驱动库,能够支持数以百万计的不同类型的驱动程序。 它的设计理念是简化驱动管理和更新的过程,让用户能够轻松地保持系统的最新状态,从而获得更好的性能和稳定性。无…

Linux高编-进程的概念(1)

目录 1.ps aux 2.top 3.kill -2 进程pid // fork函数 getpid拿自己的进程号 getppid拿父进程号 fork()&&fork()||fork() 父子进程的关系: 僵尸进程,孤儿进程 僵…

zookeeper源码分析之事务请求处理

一.参考 zookeeper启动和选举的源码分析参考之前的帖子. 二.源码 1.职责链模式. 每次经过的processor都是异步处理,加入当前processor的队列,然后新的线程从队列里面取出数据处理. PrepRequestProcessor 检查ACL权限,创建ChangeRecord. SyncRequest…

用Python更改Word文档文本的字体

更改文字字体是编辑和美化Word文档时的一项常见需求,使用合适的字体不仅可以提升文档的整体视觉效果,还能突显关键信息,使得内容更加突出。然而,手动更改每一个文字的字体既繁琐又费时。因此,掌握一种高效的方法来自动…

verilog当中仿真的时候赋值用=还是<=

【总结&#xff1a;<是所有数据同时变化&#xff0c;而是顺序执行。如果是左边数据的赋值都是不关联的&#xff0c;那么就可以用<&#xff0c;使所有赋值同时有效。如果有a和b都需要赋值&#xff0c;且b的值跟a有关的同时还需要一起变化&#xff0c;那么可以用】 一般情…

C++ UML 使用 doxygen 生成源码类图

一&#xff1a;安装 sudo apt install doxygensudo apt install doxygen-guisudo apt install graphviz graphviz-doc 二&#xff1a;使用 命令行输入 doxywizard&#xff0c;打开图形界面 参考&#xff1a; https://www.cnblogs.com/guohaoblog/p/15151353.html

探秘:哪些项目需要代理IP来助力?

网络爬虫&#xff1a;数据采集的秘密武器 网络爬虫是互联网世界中的“数据矿工”&#xff0c;它们在网络中不断爬行&#xff0c;采集各种有用的信息。然而&#xff0c;频繁的访问请求很容易引起目标网站的警觉&#xff0c;甚至被封禁。此时&#xff0c;代理IP就像是爬虫的“隐…

Springboot发邮件功能如何实现?详细步骤?

Springboot发邮件配置指南&#xff1f;如何集成Spring Mail发邮件&#xff1f; 无论是用户注册、密码重置还是重要通知的发送&#xff0c;邮件都是不可或缺的沟通方式。Springboot作为一个流行的Java开发框架&#xff0c;提供了简洁易用的方式来实现邮件功能。AokSend将详细探…

LLM的一些基础知识:参数和内存估计

介绍&#xff1a; 基于 Transformer 架构的大型语言模型 (LLM) 已变得越来越普遍。例如&#xff0c;Mistral AI 团队推出了Mistral 7B 模型。了解其推理、微调和训练的内存需求对于高效部署和利用至关重要。 总结&#xff1a; 推理内存估算&#xff1a;对于 70 亿参数模型 (…

安装docker 遇到异常Could not resolve host: mirrorlist.centos.org; 未知的错误

问题 安装docker 遇到异常 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was 14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误” 1、安装Docker依赖包 yum install …

机器学习第十二章-计算学习理论

目录 12.1基础知识 12.2 PAC学习 12.3有限假设空间 12.3.1可分情形 12.3.2不可分情形 12.4VC维 12.5 Rademacher复杂度 12.1基础知识 计算学习理论研究的是关于通过"计算"来进行"学习"的理论&#xff0c;即关于机器学习的理论基础&#xff0c;其目的…

数据分析实操案例分享:制造企业如何对订单数据进行BI分析?

提到数据分析&#xff0c;大家可能首先想到的是它在零售行业的应用&#xff0c;它能够助力商家实现精准营销&#xff0c;从而带来盈利。 事实上&#xff0c;数据分析的重要性已经扩展到制造业&#xff0c;它在该行业中的作用日益凸显。它能够帮助生产管理者迅速识别异常&#…

零基础也能看懂的五大网络安全技术,学网络安全真的可以很简单

网络安全技术是保护网络不受未经授权访问、破坏或盗取信息的重要手段。以下是五种零基础也能看懂的网络安全技术&#xff1a; 1.防火墙技术&#xff1a;防火墙是一种网络安全设备&#xff0c;用于监控和控制进入或离开网络的流量。它可以识别不安全的数据包&#xff0c;并阻止…

使用vs配置opencv环境(属性表方法)

opencv官网&#xff1a;https://opencv.org/releases/ 老手回忆&#xff08;新建属性表&#xff09; Step1: 安装VS&#xff0c;安装openCV Step2: 新建项目&#xff0c;新建项目属性表&#xff0c;debug|x64新建属性&#xff0c;命好名字 Step3: VC目录-包含目录中添加: 安装…

How can i wait for the actual reply of an openai-assistant? (Python OpenAI API)

题意&#xff1a;如何等待 OpenAI 助手的实际回复&#xff1f;&#xff08;Python OpenAI API&#xff09; 问题背景&#xff1a; I am interacting with the openai assistant API (python). so far, it works well. but sometimes the api returns the message i sent to th…

算法的学习笔记—包含 min 函数的栈(牛客JZ30)

&#x1f600;前言 在日常编程中&#xff0c;栈是一种常见的数据结构&#xff0c;具有后进先出的特点。它支持基本的操作如 push&#xff08;入栈&#xff09;、pop&#xff08;出栈&#xff09;和 top&#xff08;获取栈顶元素&#xff09;。然而&#xff0c;当需要在栈中快速…

linux容器基础-namespace-1(mnt)

mnt namespace mount namespace可隔离出一个具有独立挂载点信息的运行环境&#xff0c;内核知道如何去维护每个namespace的挂载点列表。 即每个namespace之间的挂载点列表是独立的&#xff0c;各自挂载互不影响。(用户通常使用mount命令来挂载普通文件系统&#xff0c;但实际…

JAVA单个商户多个门店点餐系统小程序源码

&#x1f525;单个商户&#xff0c;多店管理新纪元&#xff01;高效点餐系统大揭秘&#x1f37d;️ &#x1f680;【一店多管&#xff0c;轻松驾驭】&#x1f680; 你是否还在为多个门店的点餐管理手忙脚乱&#xff1f;&#x1f92f; 想象一下&#xff0c;从繁华都市的中心商…