一、引言
移动App发展到今时今日,几乎所有应用程序里都有音视频相关功能,总结起来大概有音视频录制,音视频播放,音视频特效处理,音视频传输这几方面内容。
比较热门的短视频应用抖音与快手,K歌应用唱吧与全民K歌,以及网易云新出的音街,还有听歌的网易云音乐和qq音乐等。虽然每种应用的运营模式不一样,但是从技术实现上大同小异。短视频类软件的视频处理更丰富,有非常炫酷的滤镜,贴纸,K歌类软件对音乐的细节处理的较多,诸如音量,音效,音调。
笔者是唱吧较早的用户,发展至今,唱吧涵盖的音视频技术相对比较全面,原唱吧音视频技术负责人展晓凯老师在《音视频进阶指南》一书中对移动端音视频最佳实践给出了具体实现,所以就以唱吧为参考,探索移动端的音视频相关技术。(代码实现上基于安卓,不过对于音视频这种偏底层的操作,各平台实现思路大致一样。另外,笔者未曾在唱吧工作过,若有侵权或其他行为,请留言沟通。若想与笔者共同探讨移动音视频技术,欢迎留言或微信smzh_james探讨)。
涉及技术目录一览
一、音频录制(录音,音频解码,音频重采样,音频混合)
二、音频播放与效果处理 (音量,音调,音效)
三、视频录制 (Camera相关,视频编码)
四、视频特效处理(美颜,滤镜,贴纸)
五、视频播放(视频解码,视频渲染, 音视频同步)
六、音视频混合
(内容链接会陆续更新) 二、效果对比与技术实现浅析
参考唱吧App的界面,做了一款简易的K歌软件,黑白风格,但是涵盖了大多数功能,以下称为SuperKtv。效果对比如下图。
(一)K歌列表页
图1是SuperKtv,图2是唱吧。
SuperKtv实现比较简单,直接获取手机上现有音频文件以列表展示,为后续功能提供一个入口。实现上没啥难度,做开发的都懂,就不再赘述。
(二)音频录制页
前两幅图是SuperKtv的音频录制页,第三幅图是唱吧音频录制页。
(三)音频编辑页
前两幅图是SuperKtv,后两幅图是唱吧。在写这边文章的时候唱吧的编辑页进行的改版,页面布局发生了巨大变化,风格上跟音街比较像。但在笔者模仿唱吧界面的时候,老用户应该比较清楚,长相跟SuperKtv非常接近,此处比较许遗憾,没能以最高相似度复原唱吧App。
(四)视频录制页
前三幅图的SuperKtv的视频录制界面,后三幅图是唱吧的视频录制界面。
从功能上对比,SuperKtv美颜面板少了锐化,瘦脸,大眼功能,另外道具功能也没有实现,稍后具体分析。
音频部分跟前面一样,重点分析视频的录制。视频的录制需要保存带美颜效果的视频,当然也可以保存原始视频画面在编辑页进行处理,唱吧中采用了前者,所以SuperKtv中也采用了第一种方案。
关于贴纸的使用,可以参考另一篇博客 Android OpenGL ES从入门到进阶(七)—— OpenGL ES 2D贴纸与Blend混合 这是一篇关于静态贴纸的文章,动态贴纸稍微麻烦一些,需要根据面部特征点时时改变贴纸的位置和角度,有的还需要做平移和缩放,贴纸的变化规则需要提前定义好,以商汤Sdk为例,贴纸的运动规则定义在一个json文件中,使用贴纸先解析json内容,然后随时间做周期运动,这就是动态贴纸的大致原理。
(五)音视频编辑页
前两幅图是SuperKtv的实现,后两幅图是唱吧的实现。
同样的,唱吧在音视频编辑页面也进行了较大改版。唱吧在演唱功能下没有实现对视频的编辑,所以也跟随了唱吧的风格,主要是对音频的编辑,功能实现上跟前面提到的音频编辑一样,比较重要的一点是视频播放,涉及到视频解码和音视频同步。如果说要实现视频的编辑功能,有两种思路,一中是用OpenGL ES处理后后台保存,另一种是使用FFmpeg或OpenCV对数据处理后保存,推荐使用OpenGL ES进行视频编辑。
(六)保存和作品列表页
第一幅图是保存的界面,第二幅图是保存后的作品列表页面。界面简单,没有与唱吧进行对比。
保存的目的是为了让保存的结果和编辑页面调节后的效果一样,相当于重复一遍编辑页面的操作,只不过要变成后台操作,前台唯一需要显示的是保存进度,后台处理过的数据直接进行编码即可。
(七)本地作品播放页
第一幅推是音频播放界面,第二幅图是视频播放界面。界面简单,没有与唱吧进行对比。
前面做了好多工作,最后的结果只是一个文件,一种是音频文件,类似于.mp3,常用的还有.m4a等;另一种是视频文件,类似于.mp4,常用格式还有.flv等。对于这样的文件每个人应该都很熟悉,手机自带功能就能够播放,所以在SuperKtv中欣赏或者分享个人作品的时候没必要自己再写一套播放器,使用现成的就可以,甚至直接调用系统API MediaPlayer就可以。关于播放器的使用,安卓平台下推荐使用EXOPlayer,这是谷歌基于MediaCodec的一款开源播放器,支持音、视频及其常用格式,使用硬件解码,还带有一些基础控件,定制性较高。SuperKtv就是基于ExoPlayer做的本地作品播放功能,效果展示如上图,使用体验也很不错。
三、总结
本文是以“唱吧App”为参考,基于Android平台,总结了移动端音视频技术的实现策略,适合有一定音视频基础的开发人员,可以作为技术方案参考,由于时间精力有限,实现细节随后以文章形式发布,若有疑问欢迎大家留言交流。
发表评论