移动端的播放器设计经验:与VLC的考量点完全不同

简介: 移动播放器面临的情况:1、渲染时按照时间戳渲染2、播放端来的流是抖动不平滑的,可快可慢,可能延时只来一帧,后紧跟N帧。VLC针对抖动的处理方式1、收流时在收到第一帧TS1的时候取本地绝对时间,作为绝对时戳absPts1,第二帧TS2到来时取本地绝对时戳absPts2。
移动播放器面临的情况:
1、渲染时按照时间戳渲染
2、播放端来的流是抖动不平滑的,可快可慢,可能延时只来一帧,后紧跟N帧。

VLC针对抖动的处理方式
1、收流时在收到第一帧TS1的时候取本地绝对时间,作为绝对时戳absPts1,第二帧TS2到来时取本地绝对时戳absPts2。差值计算absDvalue = absPts2 - absPts1  TsDvalue = Ts2-Ts1 ,如果absDvalue > TsDvalue 说明数据延时到来,否则时提前到来。这种方式的缺陷是:以第一帧作为参考,可能第一帧本身就晚到了。

2、将absDvalue值累计到clock机制里,clock里会计算这种误差,反应到送渲染的时戳里,这样达到播放端与发流端的速度保持一致,减少缓冲数据的堆积(即时钟漂移策略)。这样做对于视频流源端是IPC等摄像机来说是合理的,且是有优势的。但是对于移动手机作为采集端,加入了调整帧率、码率等手段做网络动态适配时,VLC的这些优势就变成了劣势。

移动端采集方案:动态监测网络状态,网络状态较差时
1、自动降低帧率、码率;
2、采集端产生堆积数据,导致播放端接收到的数据延时较大。如果此时网络情况突然改善,播放端会收到一大串的帧,类似脉冲式的效果。

移动播放端的改进
1、考虑到音视频同步问题,以音频作为调整的触发点;
2、收流侧实时统计每帧音频是否延时,计算延时时间。基准的缓存时间为500ms,如果延时时间>缓存时间,连续500ms时,可以增加缓存时间(即后续每帧的绝对时戳=curpts+新缓存时间),相当于渲染时间延后了。使用该方式可以在网络情况差的情况下,平滑播放但整体延时了。
3、当网络情况好转时,同样的方式计算出延时间<缓存时间,连续500ms时,可以减少缓存时间(即后续每帧的绝对时戳=curpts+新缓存时间(新的缓存时间比原先的缓存时间小)),并且通知渲染模块,调整已有的渲染队列中数据的pts值,这样启到加速渲染的效果。
4、注意:快速增加延时,但缓慢减少延时。如快速减少延时,会导致在网络情况好的时候,音视频卡顿。
目录
相关文章
|
11月前
|
人工智能 供应链 安全
智能体开发的学习路径:对标国家职业标准的系统化能力构建
程序员陈凯苦于转型智能体开发,课程零散难入门。直到接触“智能体来了”系统化课程,依《人工智能工程技术人员国家职业标准》分三阶段进阶:1-3月打基础,掌握Python、大模型与数据库;3-6月学架构、意图识别与对话管理,达中级水平;6-12月实战企业级项目,如供应链智能体,契合高级工程师要求。课程融合API开发、安全治理与模型优化,助力从Java开发者成长为AI工程师。
|
10月前
|
人工智能 Android开发 iOS开发
MNN × Qwen 实战:离线运行大模型的正确姿势
本期教程带你用MNN+Qwen在手机端部署大模型,从安装MNN Chat体验离线对话,到源码编译、模型转换与推理测试,再到Android/iOS移动端部署全流程实战,并提供精度与性能调优秘籍,助力端侧AI创新挑战赛。
10148 26
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
603 1
|
缓存 NoSQL Java
京东电商下单黄金链路:防止订单重复提交与支付的深度解析
【10月更文挑战第21天】在电商领域,尤其是在像京东这样的大型电商平台中,防止订单重复提交与支付是一项至关重要的任务。
969 44
|
消息中间件 NoSQL Java
订单超时取消的11种方法(上)
大家好,我是三友~~ 延迟任务在我们日常生活中比较常见,比如订单支付超时取消订单功能,又比如自动确定收货的功能等等。 所以本篇文章就来从实现到原理来盘点延迟任务的11种实现方式,这些方式并没有绝对的好坏之分,只是适用场景
订单超时取消的11种方法(上)
|
网络协议 安全 Python
python实现对网络流量分析
Python提供多种工具进行网络流量分析,如`pcap`库用于实时捕包,`dpkt`库用于解码数据包,以及`Scapy`库进行高级分析。
1355 1
|
人工智能 自然语言处理 前端开发
|
vr&ar 开发者 C++
游戏开发丨基于Panda3D的迷宫小球游戏
游戏开发丨基于Panda3D的迷宫小球游戏
901 4
|
监控 Linux
在Linux中,使用哪⼀个命令可以查看自己文件系统的磁盘空间配额呢?
在Linux中,使用哪⼀个命令可以查看自己文件系统的磁盘空间配额呢?
|
存储 分布式计算 大数据
使用 Java 进行大数据处理和分析
【4月更文挑战第19天】本文探讨了Java在大数据处理中的关键作用,涉及Hadoop框架、HDFS数据存储、MapReduce编程模型及Spark等数据分析工具。还包括数据预处理、可视化、性能优化、安全与隐私保护以及完整处理流程。Java在金融、医疗、电商等领域有广泛应用,为大数据洞察和决策提供支持,但同时也需要开发者具备深厚的技术背景和实践经验。
1172 2