2017 年,短视频成为了内容创业的新风口,各种短视频 App 如雨后春笋般先后上线。随着互联网内容消费升级,视频越来越像文字、图片一样,成为每一个 App 不可或缺的一部分。

为了能够更好地聚焦于业务,早日完成短视频 App 的上线,越来越多的公司倾向于选择一家靠谱的短视频 SDK 来起步,怎么定义靠谱?要关注哪些指标?仅功能满足就可以了吗? —— 显然不够。如果只是看下功能列表和商业版授权价格,不考虑开发易用性,最后还是要吃苦头走很多弯路的。

那么如何选择短视频 SDK ?站在 App 开发者的角度列了下面这份自检清单供大家参考

1. 包体是否足够小

App 的包体大小,对获取用户有着至关重要的作用,特别是在线下的推广活动中,包体太大,下载费时费流量,很多用户会失去耐心,从而直接导致 App 的推广效果大打折扣。

而 App 的包体大小,除了自身的代码量,也会受到第三方库的包体影响,因此,短视频 SDK 包体越小,对于减小 App 包体大小越有帮助,开发者才会越喜欢。

那么,如何做到尽可能的减小 SDK 的包体呢 ?

  • 尽一切努力使用 Android/iOS 系统原生的 API,不怕难用,不怕踩坑

  • 良好的模块划分,不同的功能生成不同的动态库,客户可选择性的拆卸和裁剪

  • 所使用的第三方库,充分配置编译选项和功能裁剪,只打包必须的功能、单独抽离所需的模块.

2. SDK 是否开放

使用第三方的 SDK,最怕的是像个黑盒,过于封闭,想配置的参数无法配置,需要的状态也没有回调,直接导致产品经理给出的 UI 和交互方案无法实现。因此,SDK 的开放性,越来越成为开发者选型的关键因素。

那么,SDK 如何做到尽可能的开放呢 ?

  • 凡可配置的参数,一律提供配置,比如:摄像头参数、编解码参数、美颜参数、混音参数等等

  • 凡可回调的数据,一律提供回调,比如:摄像头采集的视频帧、纹理 ID,麦克风采集的音频帧等等

  • 凡运行过程中的状态,一律提供通知,比如:拍摄状态、转码进度、取消事件等等

另外,还需要尽可能地跟 SDK 上下游厂商建立良好的合作关系,比如 美颜、滤镜、人脸贴纸特效、大眼瘦脸等供应商,让客户可以随时快速接入和替换任意一家厂商,从而加快产品迭代和上线的速度。

3. 性能是否足够好

虽然手机的性能越来越强大,但 CPU 使用率居高不下、发热厉害、内存消耗大、运行速度慢的 App 非常影响用户体验,因此,无论是 App 本身,而是第三方 SDK,性能永远是值得关注的重点。

SDK 如何做到更好的性能呢 ?其实就一条:充分地利用 GPU,尽一切可能减少 CPU 消耗,对于短视频 SDK 的开发,具体有哪些值得关注的点呢 ?

  • 音视频编解码尽可能地使用硬编/硬解

  • 视频/图像的处理,尽可能使用 OpenGL,包括:美颜、滤镜、水印、剪裁、旋转等等

  • 尽可能更高效地编写 OpenGL 代码,使用一些提高效果的特性,包括:VBO, VAO, FBO, PBO 等等

  • 动态管理 so,没有用到的不加载;动态管理内存,使用时再分配

  • 合并处理流程,各种音视频特效和处理,依次记录状态,待保存的时候,再调用算法处理

4.  UI 和 SDK 逻辑是否彻底分离

优秀的 SDK,一定要尽可能避免把 UI 的界面和逻辑包含进去,不然 SDK 的使用者,很难满足产品经理的 UI 和交互设计要求,做出差异化的效果。

那么,SDK 如何做到与 UI 逻辑彻底地分离呢 ?

需要充分分解每一个短视频的功能需求,搞清楚每一个需求的实现原理,哪部分是 UI 的,哪部分是核心的,前者写到 Demo 上,而后者则写入 SDK 里面。

就拿短视频剪辑这个功能点来举个例子,下图所示是短视频的一个热点功能,对短视频截取中间某一段片段。

仔细思考这个功能点,其实关键点在于:

  1. 获取视频中的连续图像在列表中进行展示

  1. 绘制左右游标,以确定剪辑的起始和结束的时间点

  1. 读取视频文件,丢弃时间区间以外的视频帧,保留剩余视频帧

属于 UI 的部分:

  1. 用列表显示视频帧图像

  1. 绘制左右游标,支持手势拖动

  1. 根据视频的总时长和游标的位置,计算出起始和结束的时间点

属于 SDK 的部分:

  1. 提供视频的时长

  1. 提供视频帧总数

  1. 提供解码后的每一帧视频数据

  1. 提供剪辑函数,参数为:起始和结束的时间戳

  1. 完成剪辑处理,输出剪辑后的视频文件

这样分离好了之后,再去编写 SDK 的接口和 UI 的 Demo 代码,就非常清晰了。

5.  是否有良好的可支持性

优秀的 App 和 SDK,首先一点就是要稳定可靠,不会动不动就奔溃。具备良好的可支持性的产品,往往更容易受到青睐。

什么是可支持性 ?

举个例子,就像家里买的某些品牌的洗衣机或者空调,在出故障的时候,液晶屏幕上会打出一些错误码,当你给售后打电话的时候,售后往往能够根据描述的信息以及错误代码很快地定位到问题或者给出临时的解决方案。

如何让短视频 SDK 具有更好的可支持性呢 ?

关键在于一套健全而规范的日志系统,可以有效提高技术支持和开发者排查问题的速度和效率,那么,设计这样一套完善的日志系统,有哪些关键点呢 ?

  • 支持配置 SDK 的输出日志级别,如:ERROR, WARN, INFO, DEBUG, VERBOSE

  • SDK 初始化的时候输出关键的排障信息,如:应用包名,SDK 版本,设备机型,系统 OS 版本,关键配置等

  • 规范的日志格式,如:<SDK TAG>:<Module TAG>:<Class TAG>:<Message>,可以快速方便地过滤出各个模块的运行状态

  • 健全的问题排查手册/文档,让每一个错误码都有文档可依,开发者可以完成简单初步的问题分析

6.  小结

总而言之,设计一款优秀并且口碑好的短视频 SDK,并不是简简单单堆积一些功能就够了,看上去功能丰富和实际开发过程中是否好用还有很大的差距。

七牛云近期推出的一套完整的短视频解决方案,不仅 SDK 包体小、性能优异、稳定可靠,而且开放易用,有着健全的生态链,集成多个第三方美颜、滤镜、AR 贴纸厂商,是一款良心之作,欢迎大家申请试用。

传送门:短视频PLSV-七牛云

转载于:https://blog.51cto.com/7741292/1978700

短视频sdk:选择一个靠谱的短视频SDK 你需要了解这些的更多相关文章

  1. 薅羊毛? 月入10万? | 这是自动化测试老司机的特长--Python自动化带你薅视频红包,一个都不放过!

    一.目标场景 如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸. ​ 与传统的红包不一样,视频红包包含位置的不确定性.大小不确定性.元素 ID 的不确定性 ...

  2. 招聘一个靠谱的 iOS

    近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更多的感受.经过了前段时间的一大波面试,我们终于找到了志同道合的小伙伴,面试也暂时告一段落了.总结下面试人过程中的感受,你也可 ...

  3. 招聘一个靠谱的 iOS程序员

    一个靠谱的简历 简历非常能反映一个人的性格和水平,相比于你在学校获得多少奖项,工作经历.项目经 历.熟悉的技术等更加关键,如果还有博客和一些 Github 上的项目,好感度++,但记得在去面试前收拾下 ...

  4. 招聘一个靠谱的iOS》面试题参考答案(上)

    说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...

  5. 《招聘一个靠谱的iOS》面试题参考答案(上)

    说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...

  6. 如何使用Add-on SDK开发一个自己的火狐扩展

    黄聪:如何使用Add-on SDK开发一个自己的火狐扩展 火狐开放了扩展的开发权限给程序员们,相信很多人都会希望自己做一些扩展来方便一些使用. 我最近做一些项目也需要开发一个火狐扩展,方便收集自己需要 ...

  7. 转发:招聘一个靠谱的 iOS

    觉得很瘦感触,因此转发:http://blog.sunnyxx.com/2015/07/04/ios-interview/ 近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更 ...

  8. 使用olami sdk实现一个语音查询股票的iOS程序

    前言 在目前的软件应用中,输入方式还是以文字输入方式为主,但是语音输入的方式目前应用的越来越广泛.在这里介绍一个使用 Olami SDK 编写的一个使用语音输入查询股票的APP Olami SDK的介 ...

  9. 黄聪:如何使用Add-on SDK开发一个自己的火狐扩展

    火狐开放了扩展的开发权限给程序员们,相信很多人都会希望自己做一些扩展来方便一些使用. 我最近做一些项目也需要开发一个火狐扩展,方便收集自己需要的数据,因此研究了几天怎么开发,现在已经差不多完成了,就顺 ...

随机推荐

  1. readthedocs网托管持多语言文档

    希望在readthedocs上创建支持多语言的文档,效果类似: 通过语言选项,可以切到到不同的语言版本:实现这个目标包含两个主要步骤: 在本地对文档进行翻译 在readthedocs.org上配置翻译 ...

  2. MyBatis(五):分页

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...

  3. mpvue小程序开发

    查阅资料,看官方文档,知道mpvue是一个使用 Vue.js 开发小程序的前端框架(美团的开源项目).框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compi ...

  4. django rest framework用户认证

    django rest framework用户认证 进入rest framework的Apiview @classmethod def as_view(cls, **initkwargs): &quo ...

  5. redis 练习 a的数据库数据迁移到b数据库

    思路 1.从a redis中获取所有的key 2.判断key的类型 3.根据key的类型,判断使用的是set/hset类型 4.set到b redis中(写入到b redis中)

  6. 30.1 HashSet存储自定义对象 未去重解决

    问题: package day30_HashSet; import java.util.HashSet; /* * 通过hashset存储自定义对象,没有进行去重. * * */ public cla ...

  7. centos7安装puppet详细教程(简单易懂,小白也可以看懂的教程)

    简介: Puppet是一种linux.unix平台的集中配置管理系统,使用ruby语言,可配置文件.用户.cron任务.软件包.系统服务等.Puppet把这些系统实体称之为资源,它的设计目标是简化对这 ...

  8. python3(三十三)debug

    """ 调试 """ __author__on__ = 'shaozhiqi 2019/9/23' # 调试程序 # . print打印,没 ...

  9. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十一)之Holding Your Objects

    To solve the general programming problem, you need to create any number of objects, anytime, anywher ...

  10. A - Engines Atcoder 4900

    题目大意:n个点,任意几个点组合后得到的点距离原点的最远距离. 题解:极角排序:https://blog.csdn.net/qq_39942341/article/details/79840394 利 ...