当前位置:网站首页 > 探索 > K歌、短视频技术最佳实践——“唱吧”音视频技术探索

K歌、短视频技术最佳实践——“唱吧”音视频技术探索

K歌、短视频技术最佳实践——“唱吧”音视频技术探索文章浏览阅读4.8k次,点赞12次,收藏30次。一、引言移动App发展到今时今日,几乎所有应用程序里都有音视频相关功能,总结起来大概有音视频录制,音视频播放

一、引言

移动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平台,总结了移动端音视频技术的实现策略,适合有一定音视频基础的开发人员,可以作为技术方案参考,由于时间精力有限,实现细节随后以文章形式发布,若有疑问欢迎大家留言交流。

上一篇: 《见字如面》IP衍生受追捧,腾讯视频打造文化综艺多维“硬需求”
下一篇: 刘跃进:充分理解文学史研究的复杂性

为您推荐

发表评论