作者:润和软件 张汉孟
一、背景
在当前全民直播时代,我们每天刷着五花八门的抖音短视频,看着各式各样电视剧、电影以及随时映入眼帘的各类视频广告等等,每天有无数的视频文件被生成、播放。我们的眼球被花里胡哨的视频疯狂的冲击,或无脑搞笑、或夸张讽刺、或鸡汤淋头、或无效科普等等,与此同时我们是否也可以想一想这些个撩人的视频是怎么在我们眼前设备播放出来的??播放一个视频文件对于OpenHarmony 3.1(以下简称OH)来说自然不在话下,这篇文章将告诉你一个视频文件(本文以MP4封装格式、H264压缩格式的的视频文件为例)是怎么在OH的设备上播放出来的。
二、OpenHarmony3.1媒体能力全景
OH技术架构如下图所示,完成视频文件播放功能的是多媒体子系统。

多媒体子系统框架如下图所示:
OH拉起了一个叫mediaserver的服务来处理媒体事务,并且封装了接口层包括JS接口、native接口提供给APP调用,mediaserver的核心则是引入了gstreamer(以下简称gst)框架来完成媒体功能。gstreamer是一套功能强大、兼容性好、结构清晰的开源媒体框架,这里不做赘述,后面有专文解析。OH也在gst的基础上开发了player engine来实现播放,同时也利用的gst丰富的插件资源实现几乎所有的媒体功能,当前已移植进来的开源插件包括file source、demuxer、video decoder、libav插件等等,当然也包括OH自研的video sink、memsink、codec hdi插件等等。
三、H264视频播放道路
大象装进冰箱分几步
我们来看视频播放流程:
播放一个视频大致分为4步:
解协议->解封装->解压缩->送显
播放pipeline
根据视频播放的步骤,我们在OH上每一个环节都能找到对应的插件来完成:
1、对于一个本地视频文件(比如uri=file:///data/h264-640x480.mp4),对应的filesrc插件来完成文件的解析,拿到MP4文件流;
2、拿到MP4文件流后,对应的qtdemux插件来解封装,完成音视频分流,输出H264裸码流和音频流;
3、拿到H264码流后,h264parse插件开始切片,输出H264帧数据;
4、处理H264帧数据,就由avdec_h264插件来完成,一般情况会输出NV12的像素数据,当然这个解码器是基于ffmpeg的软解插件,相信不久各个芯片厂商的硬件加速解码器都会加进来;
5、至此解码的工作已经完成,后面就要根据显示的像素格式、size来对解码输出数据进行后处理(转换、缩放、裁剪等),会有Converter、Scaler、Clip插件来完成;
6、满足显示要求后就会使用surfacesink插件完成送显。
再加上audio的插件解码出音频数据,OH的player会完成音视频同步,至此一个视频文件就会播放显示在屏幕上。
在OH为了更好的用户体验,同时也引入了一些解决性能问题的插件,比如multiqueue插件来实现buffer队列,也使用decodebin高级插件来完成解码element的选择。
最终我们可以梳理出来一条播放的pipeline:
通过播放OH自带的图库播放本地H264视频,抓取log,搜索OnElementSetupCb关键字也可以得到播放的pipeline,也进一步验证了本文的分析。
我们也可以使用gst-launch手动创建pipeline来验证:
gst-launch --gst-plugin-path=/system/lib/media/plugins filesrc location=/data/media/h264.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=640,height=480 ! surfacememsink
附录:
<1> OH标准系统media组件介绍
multimedia_media_standard: Implementation of media playback and recording | 媒体播放和录制功能实现
<2> MP4封装格式介绍:
<3> gst介绍:
Gstreamer应用开发手册1:关于Gstreamer_我不是萧海哇~~~~的博客-CSDN博客_gstreamer开发手册
<4> OH 3.1release 版本路书:
zh-cn/release-notes/OpenHarmony-v3.1-release.md · OpenHarmony/docs - Gitee.com
<5> OH媒体子系统框架介绍:
https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/媒体子系统.md
<6> OH视频播放应用开发指导:
zh-cn/application-dev/media/video-playback.md · OpenHarmony/docs - Gitee.com
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
目前我正在使用这个正则表达式从YoutubeURL中提取视频ID:url.match(/v=([^&]*)/)[1]我怎样才能改变它,以便它也可以从这个没有v参数的YoutubeURL获取视频ID:http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU感谢阅读。编辑:我正在使用ruby1.8.7 最佳答案 对于Ruby1.8.7,这就可以了。url_1='http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf'url
我一直在寻找一种以编程方式或通过命令行将mp3转换为aac的方法,但没有成功。理想情况下,我有一段代码可以从我的Rails应用程序中调用,将mp3转换为aac。我安装了ffmpeg和libfaac,并能够使用以下命令创建aac文件:ffmpeg-itest.mp3-acodeclibfaac-ab163840dest.aac当我将输出文件的名称更改为dest.m4a时,它无法在iTunes中播放。谢谢! 最佳答案 FFmpeg提供AAC编码功能(如果您已编译它们)。如果您使用的是Windows,则可以从here获取完整的二进制文件。
我如何用ruby编写一个脚本,当从命令行执行时播放mp3文件(背景音乐)?我试过了run="mplayer#{"/Users/bhushan/resume/m.mp3"}-aosdl-vox11-framedrop-cache16384-cache-min20/100"system(run)但它也不起作用,以上是播放器特定的。如果用户没有安装mplayer怎么办。有没有更好的办法? 最佳答案 我一般都是这样pid=fork{exec'mpg123','-q',file} 关于ruby
目录1古彝文与古典保护2古文识别的挑战2.1西文与汉文OCR2.2古彝文识别难点3合合信息:古彝文保护新思路3.1图像矫正3.2图像增强3.3语义理解3.4工程技巧4总结1古彝文与古典保护彝文指的是云南、贵州、四川等地的彝族人使用的文字,区别于现代意义上的彝文,古彝文指的是在民间流通使用的原生态彝文,多达87046字。古彝文的起源距今至少数千年,是世界上最古老的文字之一。对古彝文字集研究有助于理解尚未被翻译成汉文、用字尚未规范化的古籍,更深层、透彻地作用于传统文化保护。古彝文字义对照图(网络资料+邵文苑供图)古籍是不可再生的宝贵资源,应当得到妥善保护。中国的古籍在历史上迭经水火兵燹等自然灾害、
一、什么是web项目ui自动化测试?通过测试工具模拟人为操控浏览器,使软件按照测试人员的预定计划自动执行测试的一种方式,可以完成许多手工测试无法完成或者不易实现的繁琐工作。正确使用自动化测试,可以更全面的对软件进行测试,从而提高软件质量进而缩短迭代周期。二、构建测试用例的“九部曲”(一)创建流程包划分功能模块日常测试活动中,都会根据功能模块进行拆分,所以在设计器中我们可以通过创建流程包的方式来拆分需要测试的功能模块,如下图中操作创建一个电脑流程包并且取名为对应的功能模块名称,如果有多个功能模块就创建多个对应的流程包,实在RPA设计器有易用的图形可视化界面,方便管理较多的功能模块。(二)在流程包
目录需求基于JavaCV跨平台执行ffmpeg命令[^1]坑一内存不足坑二多个ffmpeg进程并行导致IO负载大,进而导致ioerror?坑三使用Java操作ffmpeg时,有时会卡死坑四Process的waitFor死锁问题及解决办法需求给透明背景的视频自动叠加一张背景图片基于JavaCV跨平台执行ffmpeg命令1我测试发现的本需求的最小依赖:dependency>groupId>org.bytedecogroupId>artifactId>ffmpeg-platform-gplartifactId>version>5.0-1.5.7version>dependency>核心代码:Stri
摘要本论文主要论述了如何使用Python技术开发一个短视频智能推荐,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述短视频智能推荐的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。 短视频智能推荐的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、热门视频管理、用户上传管理、系统管理,用户:首页、个人中心、用户上传管理、我的收藏管理,前台首页;首页、热门视频、用户上传、公告信息、个人中心、后台管理等功能。由于本网站的功能模块设计比较全面,所以使得整个短视频智能推荐信