短视频APP开发主要依赖于短视频SDK架构设计

短视频 SDK 架构中主要做的一些事情,这其中最重要的就是短视频 SDK 的架构设计,包括架构设计理念、架构图、整体数据流程、模块架构设计等。今天小编就简单介绍一下短视频APP开发中,选择什么样的厂家,厂家SDK 架构设计。

短视频SDK架构

Android 短视频 SDK 的架构图,可以划分为四层。第一层为应用层(基于 SDK 开发的应用);第二层为 SDK 对外的接口层(均以 PLShortVideo 为前缀);第三层为核心层,主要是内部的一些模块(其中分 Java 和 Native 两块);第四层主要是 Android 系统层。

整体数据流程图;输入模块支持通过两种方式采集数据,一种是通过摄像头和麦克风采集数据,采集到的数据可以进行数据处理(美颜、人脸识别等),另一种则是通过文件导入并进行解码处理;编辑模块有着十分丰富的功能比如添加字幕、MV 特效、添加背景音乐等等;编码模块主要支持 H.264 软编/硬编以及 ACC 软编/硬编;编码之后的数据会进行 MP4 封包,此后进入输出模块,可以存储到本地也可以使用 HTTP 进行上传。

录制模块的重点在于帧数据获取,除了可以通过摄像头获取视频帧,还可以通过屏幕录制获取视频帧,而音频帧数据主要还是通过麦克风进行获取;虚线部分的 Filter 模块主要实现了内置美颜/滤镜功能,另外因为有纹理和 YUV 数据的 CallBack 回调机制,所以也支持第三方库的美颜、滤镜、特效等功能;处理后的数据会经过 OpenGL 进行裁剪,缩放,旋转等操作,这些工作虽然可以由 CPU 来进行,但是会比较耗时,利用 GPU 是更明智的选择;最后得到纹理后,会被分成两路,一路渲染显示,另一路进行编码封装,这两个线程共享同一个纹理,这样的处理大大减少了资源的占用,提高了 SDK 的工作效率。

首先需要导入一个视频文件(使用短视频 SDK 拍摄或者从外部导入的视频文件),解包之后会得到相应的帧数据,接着分别通过音视频解码器得到 PCM 和纹理,然后把它们送进编辑引擎,在这里面可以进行各种各样的处理(水印、文字特效、背景音乐、多音频混音等)数据经过编辑之后,与录制相同会分两路,其中一路进行播放渲染,另一路会进行转码保存。

通过摄像头采集的数据无需解码,而 MV 视频文件的帧数据则需要解码后才可以进行处理。SurfaceTexture 的主要作用是将解码后的数据帧进行回调通知你可以在 OpenGL 线程中更新纹理了,这个通知可以是多线程同时进行的操作,所以在帧回调时一定要对其进行上锁,防止出现 MV 画面之间不同步的问题。更新之后得到相应的纹理,将其进行混合就能得出最后的 MV 特效图。

日志系统主要是为了方便排障,快速定位问题以及调试问题,我们会将 SDK 版本、设备机型、系统版本,关键配置等一一进行输出,以方便用户根据这些信息进行排障。

只有选择好科学合理的短视频SDK架构,才能配合好短视频APP开发出稳定的短视频系统,短视频APP开发结合短视频SDK架构打造出一套完整的短视频系统功能。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

这篇SEO干货讲的不错!不来看看?

作为一个网络推广从业者,SEO一直是我笔者勤学苦练的绝技,可是,找了很多资料,就没有一个干货是讲真话的,但是,功夫不负有心人,总算让我找到了,好了,送给需要了解...

27250
来自专栏JavaQ

如何有效的阅读源代码?

无论是JDK中常用类的源码,还是常用框架的源码,都是经过开发者深思熟虑、不断完善才形成的,所以想要理解当时作者的设计意图和思想不是很轻松。 看源码首先需要找到入...

29860
来自专栏云计算D1net

谷歌云平台加入对更多微软产品的支持

谷歌正在向Google Cloud Platform(谷歌云平台)的用户提供更多可用的微软软件。 谷歌在12月8日宣布,将允许客户在谷歌云平台上运行Window...

38270
来自专栏王清培的专栏

.NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)

阅读目录: 1.背景介绍 2.在业务层中加入核心领域模型(引入DomainModel,让逻辑、数据有家可归,变成一个完整的业务对象) 3.统一协调层Applic...

26570
来自专栏Jerry的SAP技术分享

从产品展示页面谈谈Hybris的特有概念和设计结构

今天这篇文章来自我的同事,SAP成都研究院Hybris开发团队的开发人员Zhang Jonathan(张健)。需要特别介绍的是,张健和成都研究院的其他开发同事不...

33950
来自专栏SDNLAB

网络可编程与验证

作者简介:唐昊,现就职于华为,从事云网络研发工作。本文所有观点仅代表作者个人观点,与作者现在或者之前所在的公司无关。

30520
来自专栏水击三千

数据库设计(一) 需求分析

目前,大多数的应用系统都属于数据库应用程序,都离不开数据库的支持。数据库设计方案的优劣对于应用程序的运行至关重要。数据库设计过程就是针对具体的应用环境,设计优化...

346100
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合优化篇(八)代码优化整理小记及个人吐槽

前言 这两天也一直在纠结这一篇文章该写什么东西,前面临时加的两篇文章就有些打乱了整体节奏,这一篇又想去写一下代码层面优化的事情,可是也不太能抓住重要的点,不太确...

26360
来自专栏EAWorld

当持续集成遇上微服务:分治优于集中

大师Martin Fowler对“持续集成”是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着...

32650
来自专栏机器之心

机器学习为核心,DeepMind助力谷歌开发的安卓 9「Pie」今日上线

今年 5 月份,谷歌 I/O 大会宣布推出安卓 9,而后经过数月的测试,谷歌收获了大量的反馈。此外,还有小米、Oppo 等 7 家设备制造商也将测试版本放到了他...

12010

扫码关注云+社区

领取腾讯云代金券