当前位置: 首页 > Web前端 > HTML5

深入分析!短视频如何成为现象级产品

时间:2023-04-05 17:23:20 HTML5

欢迎来到腾讯云+社区,获取更多腾讯海量技术实践的干货~本文由BestSDK团队发布于腾讯云+社区2016年数中国移动的短视频用户为1.5今年预计达到2.4亿,增长率为58.2%。可以看出,短视频的人气一直在上升;近年来,短视频的制作模式不断进化,从UGC到PGC,再到最新的MCN,内容的制作能力和质量都得到了极大的提升。短视频发展历程图1图1展??示了短视频与直播的发展历程。众所周知,2016年是直播元年。这一时期诞生了很多直播平台,比如熊猫、映客、斗鱼等;2017年,短视频的热度不亚于直播。大家可能认为短视频是2017年开始火的,其实快手、秒拍、美画早在2015年就诞生了。等短视频App。图2图2展示了短视频在各个行业的综合应用。短视频App开发难点介绍完短视频的历史和发展趋势,下面重点介绍开发短视频的准备知识和难点:1.音视频领域先天门槛高深入理解音视频编码格式H.264和AAC编码细节;混合时如何把两个音频调整到相同的参数,用什么算法混合等等。2.图形图像,OpenGL处理??相机预览数据,图像处理,音视频编解码都需要了解RGB的数据格式和YUV色彩空间,以及它们之间的转换方式等。3.对应平台的camera,microphone,codec,multimediaprocessing等平台相关的API一定要非常熟悉,否则他们的一些坑会花费你很多时间。4、高级功能视频编辑离不开特色和高级功能,如美化、滤镜、MV特效、连拍、文字特效等,每一项高级功能都对各个方面的技术提出了很高的要求。5、系统版本、机型等兼容性问题,这是老生常谈的问题了。不管是iOS还是Android,机型和系统版本越来越多,必然会带来兼容性问题。例如,可能会出现少数安卓机型编码的视频无法在iOS端播放的情况。像这样的兼容性问题需要解决。6.性能和资源占用的优化移动应用的计算资源受到相应系统的严格限制。在进行音视频采集、渲染、编码等复杂计算的同时,还需要保证应用有足够的资源才能流畅运行。这就需要开发者有丰富的调优能力。短视频SDK架构设计接下来介绍一下我们团队在短视频SDK实践中主要做的一些事情,其中??最重要的是短视频SDK的架构设计,包括架构设计理念,架构图,以及整体数据流程,模块架构设计等。1.SDK架构设计理念图3说到SDK的设计理念,不得不提的是命名规范,就像七牛的企业理念“简单可靠”。我们的命名规范统一、简洁、精炼。例如,我们的外部核心类以PLShortVideo为前缀,如图3所示,分别是录制、编辑、编辑模块的名称;参数配置类均以PLxxxSetting命名(图4);接口回调类都是以PLxxxListener为标准命名的。在图4的第二点,我们遵循高度模块化和可插拔模块的概念;高度模块化必须保证每个类和方法都是“真实的”、“各司其职”,这样写起来逻辑才能更清晰;高模块化可以促进高重用,减少重复代码;图5是SDK中的核心转码类,因为剪辑剪辑最终保存的时候需要解码和重新编码的过程。这里转码核心类可以实现高复用。图5图6图6展示了短视频SDK的包体划分。从表中我们可以清楚的看到各个包体的功能划分,不同的功能放在不同的包体中。我们没有使用ffmpeg的软解码和软编辑,而是尝试使用Android和iOS系统API进行硬编码和硬解码。这样不仅减小了包的大小,而且速度也快了很多,虽然在技术层面上会增加很多难度,会踩很多坑,但是我们还是坚持选择这个方案。在引入第三方库的时候,我们也会通过全量配置和剪裁来严格控制包的大小,让所有包的总和达到目前“小而精”(1.5M)的效果。表中最后一个内置的过滤器模块,可以选择性的复制里面的过滤器资源,SDK会自动判断。下面是关于模块设计的一些想法。图7中的第三点是与UI解耦。如图7所示,是从不同App获取的截图。可见每个App都有自己的设计。作为短视频SDK,绝对不允许在UI方面限制客户可以玩什么。市面上有些短视频SDK将UI硬编码,成为SDK的一部分,在设计UI界面时对客户非常不友好;我们采用另一种方式,将SDK和UI解耦,客户的UI是可定制的,整个SDK只有一个地方接受视图:第二是可扩展性。我们遵循高扩展性和开放性的理念。录制剪辑过程中会有数据回调,支持第三方库美颜、滤镜、贴纸、特效等功能。2.短视频SDK架构图8图8为Android短视频SDK的架构图,可分为四层。第一层是应用层;第二层是SDK对外接口层;第三层是核心层,主要是一些内部模块;第四层主要是Android系统层。图9图9为整体数据流程图;输入模块支持两种方式的数据采集,一种是通过摄像头和麦克风采集数据,并对采集到的数据进行处理。另一种是通过文件导入和存储数据。进行解码处理;编辑模块具有非常丰富的功能,如添加字幕、MV特效、添加背景音乐等;编码模块主要支持H.264软/硬剪辑和ACC软/硬剪辑。下面将重点介绍几个模块。图10图10是录音模块的示意图。录制模块的重点是获取帧数据。除了通过摄像头获取视频帧外,还可以通过录屏获取视频帧,而音频帧数据主要通过麦克风获取;虚线部分的Filter模块主要实现了内置的美颜/滤镜,另外由于贴图和YUV数据的CallBack回调机制,也支持第三方库中的美颜、滤镜、特效等功能;处理后的数据将通过OpenGL进行裁剪、缩放、旋转等。虽然可以由CPU来完成,但是会比较耗时,使用GPU是比较明智??的选择。图11图11为编辑模块示意图。首先,您需要导入一个视频文件。解包后会得到相应的帧数据,然后分别通过音视频解码器得到PCM和纹理,然后送到编辑引擎,编辑引擎可以进行各种处理数据。剪辑后和录音一样,会分成两个通道,一个通道播放渲染,一个转码保存。图12图12展示了MV特效的实现思路。摄像头采集的数据不需要解码,但是MV视频文件的帧数据需要解码后才能处理。SurfaceTexture的主要作用是回调解码后的数据帧,通知你可以在OpenGL线程中更新贴图了。这个通知可以被多个线程同时执行,所以在frame回调的时候一定要加锁来防止。MV画面不同步的问题。图13图13是日志系统的框图。日志系统主要是为了方便故障排除,快速定位和调试问题。我们会将SDK版本、设备型号、系统版本、关键配置一一输出,方便用户根据这些信息进行排查。当然,开发过程不可能一帆风顺,必须克服一些坑,才能让整个SDK更加完善。下面罗列一下我们踩过的一些坑和排查的过程。一些视频剪辑有模糊的屏幕。在分析了客户提供的一些示例视频后,我们发现问题都是双向引用B帧的Highprofile视频。如图14所示,B帧(3)在中间,其P帧(2、4)指的是左右两侧依次显示,但是在进行帧存储和视频解码时,B框架(3)在这两个P框架的后面。最后跟大家分享一句话,也算是对自己的鼓励,就是“Fakeituntilyoumakeit”。对于我们的客户端团队,为了将SDK打磨到最完美的状态,我们做了很多的尝试,历尽千辛万苦,才有了今天的成果。我们还有很多工作要做,我们会继续努力,谢谢大家!Q&A短视频的发展前景和未来的发展方向是怎样的?更多短视频相关问答,尽在腾讯云+社区!相关阅读快手为何能成为现象级产品?还原2017年最火的短视频背后的业务逻辑,开发手游和视频直播。这些SDK必备数据告诉你抖音是如何在半年内逆袭的。本文已由作者授权腾讯云+社区发布,转载请注明文章出处