一:集成

android端

  1. 我们的SDK以module的形式提供, 在你的项目中点击File/import midule导入,并在您主module中的build.gradle中增加implementation project(':LanSongSDK')

  2. LanSongSDK module下的assets下有LanSongIFxxx开头滤镜用到的各种图片资源, 如您项目没有用到LanSongIFxxx开头的滤镜,则可以删除。

  3. 其他的代码,各种资源,各种视频素材等均为演示所用,不属于sdk的一部分。

  4. 授权和混淆,在我们提供的另一个文档中.

  5. 代码使用

初始化: 

   1.LanSoEditor.initSDK(getApplicationContext(), null); // 初始化SDK.[必须] (null时,APP名字一定是我们demo名字)
    2.LanSoEditor.setTempFileDir(); //设置SDK处理过程中的临时文件缓存路径 [可选]
   3.LanSoEditor.setSDKLogOutListener //设置日志输出监听 [可选].

使用流程[仅参考]: 
1.明白我们SDK的各种DrawPadxxx图层的意思, 各种xxxLayer图层的意思.和容器里放图片,类似合成里放图层一样的思想. 
2.先在我们demo上运行您要的各种演示功能, 然后拷贝我们的相关demo代码,各种Activity.java, 在您的工程里运行一遍. 
3.我们每个Activity.java都有注释, 并尽量简单清晰. 您明白大概流程后, 整合归纳成您自己的代码.

ios端

  1. 拖动LanSongEditorFramework.framework到你的项目中, 并在工程的Build Phases标签页的Link Binary With Libraries中把我们的framework放到最上面.

  2. 在Build Phases的<Link Binary With Libraries>中增加libz.tbd , libbz2.tbd, libc++.tbd, libiconv.tbd

  3. 在你代码中包括头文件: #import <LanSongEditorFramework/ LanSongEditor.h>

  4. LanSongEditorBundle.bundle 是我们sdk中 以LanSongIFxxx开头用到的一些滤镜图片,如果没用到LanSongIFxxx开头的滤镜,则不用增加此文件。如用到则把LanSongEditorBundle.bundle 拖动到你项目的 copy Bundle Resources中

  5. 其他的代码,各种资源,各种视频素材等均为演示所用,不属于sdk的一部分。

  6. 如果您选择ios设备中的视频,则应该先拷贝到沙盒里,然后再用我们SDK处理.我们SDK提供了拷贝的方法LSOEditMode. 拷贝后再处理.

  7. 代码使用

初始化
1.   [LanSongEditor initSDK:nil]//初始化SDK [必须] (nil时,APP名字一定是我们demo名字)
2.   [LanSongEditor setTempFileDir:@"xxx"]; //设置SDK的临时文件路径 [可选]

使用流程[仅参考]:
1.明白我们SDK的各种DrawPad/Layer的意思. 我们每个公开类的注释,都在对应的.h头文件里, 您可以简单看下.
2.先在我们demo上运行您要的各种演示功能, 然后拷贝我们的相关demo代码,各种Activity.java, 在您的工程里运行一遍.
3.我们每个Activity.java都有注释, 并尽量简单清晰. 您明白大概流程后, 整合归纳成您自己的代码.

二:API的命名方式

  • 我们尽量把常见的处理用一个类来表示:VideoOneDo.比如视频裁剪时长,裁剪画面,缩放,增加图片/文字,增加滤镜,压缩,增加封面,增加背景音乐等,让您一次性执行.

  • 所有以DrawPad开头的都是视频容器;AudioPad开头的是音频容器;BitmapPad开头的是图片容器;

  • 所有以xxxLayer或xxxPen的类(ios版本用pen表示),都是图层, 图层个独立的一层,两层之间互不干扰, 您执行一次addxxxLayer/addxxxPen就增加一层, 执行removexxxLayer

    就删除一层, 在执行addxxxLayer/Pen后返回给你一个图层对象,利用图层对象,您可以做所有图层的操作,比如图层继承自父类Layer/Pen, 可以移动/缩放/旋转/滤镜/区域显示/

  • 隐藏/镜像/增删子图层/美颜/亮暗调节/圆形显示等操作.

  • 所有以executeXXX开头的各种方法或函数,都是阻塞执行的方法,只有当前方法执行完毕后,才执行下一行代码;

  • 我们尽量做到:

1.所有以addxxxLayer开头的, 都可以执行多次;执行一次,则增加一个图层

2.所有以remove开头的,都是删除;   

3.所有以set开头的, 都是设置一个参数,如果多次设置,则覆盖上一次的设置参数. 

4.所有以get开头的, 都是获取一个参数, 多次获取根据每个方法名字而定, 如果有getNextXXX,则表示依次获取.

功能用到的英文单词:

  • video:视频 videoLayer视频图层

  • audio:音频 audioLayer 音频图层

  • cut:裁剪视频时长crop:裁剪画面/scale:缩放/Rotate:旋转/Adjust:调节/visible:可视/hiden:隐藏/switch:切换(比如切换图片,切换滤镜)/

  • Extract:提取/convert:转换/position:位置/merge:合并/speed:速度/FrameRate:帧率/BitRate:码率/reverse:倒序/Layout:布局;

  • cover 封面; overlay:叠加 类似一层一层的叠加.

  • logo:水印

  • concat 拼接.

  • 您可以通过在我们demo中搜索这些单词,来找到我们的对应的各种功能.

二:SDK由三部分组成

第一部分. 容器和图层(DrawPad):

  • 视频容器 向容器里增加各种图层, 对图层进行任意的增删调节, 从而实现你们特定的需求。

  • 工作原理类似Photoshop的图层处理或Adobe After Effect软件的图层处理。

  • 对应的图层有:

    • CameraLayer 摄像头图层.

    • VideoLayer(视频图层),

    • BitmapLayer(图片图层),

    • ViewLayer(android/ios中的UI图层),

    • MVLayer(有透明通道的视频图层),

    • CanvasLayer(Android的绘制Canvas类封装为一个图层,IOS的UIView本身就可以工作在异步线程,只需要UI图层既可.),

    • DataLayer(输入的RGBA的数据,您如果有别的数据,比如BPG或自己定义的图像数据,也可以根据这个输入)

    • GifLayer,YUVLayer,纹理图层,双视频图层等等, (IOS中用Pen来表示)

  • 您可以认为:所有的素材都是一层一层铺上去的。

  • 容器回调: 有每一帧进度回调,完成回调, 错误回调,截图回调,拉流回调(把每一帧拉出来).

  • 音频容器: AudioPadExecute.后台执行, 把各种声音增加到音频容器里,可以指定在特定时间段内增加,增加音频的多长,在addSubAudio后,会得到一个AudioSource对象,

  • 通过这个对象,可以设置声音的音量,是否循环,是否静音,声音暂停,声音重复,声音快慢,声音的频率和幅度调整(变声,萝莉,大叔声音)等.

  • 图片容器:前台执行,是从视频容器演变而来,用来把各种图层编辑好后, 输出为一张图片.有具体的举例.

  • Ae模板特效:Ae模板实际也是容器和图层的一种扩展,因Ae太强大,可以做各种炫酷的效果,特说明一下。流程是:设计师用Adobe After Effect做好各种视频动画,

  • 比如炫酷视频,文艺/搞笑的场景,相册效果等,根据我们的指导文件导出。蓝松SDK会解析导出的文件,自动还原成AE设计时的动画效果;

  • 无需开发者再一帧一帧的绘制,开发者只需要做的是:引导用户选择素材,然后替换即可,执行后,即可得到用户自己的效果。

第二部分. VideoEditor/AudioEditor:

  • 用来处理常见的功能,比如 替换背景音乐,获取音视频,裁剪,剪切,分离,拼接,合并,音频调节,视频转码,压缩,倒序,加减速等工作。这些常见的功能,

  • 用VideoEditor即可完成,不用容器+图层的架构,当然用图层架构也可以。

  • 使用说明:在VideoEditor是对视频做处理,AudioEditor是对音频做处理.每个方法都是直接阻塞执行.建议在您的主线程中创建VideoEditor/AudioEditor对象,并设置进度回调,

  • 然后在其他线程执行executeXXX;

  • VideoEditor/AudioEditor,不可以多个同时执行,因为大部分手机只有一个编解码器;

  • 建议:对于需要视频编码的功能, 推荐用我们的 容器+图层的架构,VideoEditor作为补充和特定个别功能使用,因为GPU对图像的处理速度比ffmpeg的软处理速度快百倍.

第三部分. 辅助和各种特定功能类:

  • LanSongFileUtil:视频编辑会产生一些临时文件, 用此类中的各种静态方法操作,临时文件会在处理完毕后删除.

  • MediaInfo : 用来获取当前视频的一些信息, 比如宽度,高度,时长,帧率,码率,旋转角度,是否是视频,是否有音频,是否有B帧。给视频编辑做参考使用。

  • ExtractVideoFrame : 获取视频里的每一帧, 异步处理,可以获取全部,也可以间隔几帧获取.我们的举例在DisplayFramesActivity和ExtractVideoFrameDemoActivity.

  • 各种以LanSongxxx开头的类,特定功能的类;

  • ios的一些特定功能包含在LanSongEditorFramework/LanSongEditor.h中, 并在LanSongEditor.h里针对每个头文件进行的简单说明,

  • 点击进去就可以看到使用,并在每个具体类的最下面有注释的使用举例代码,这里不再介绍.

三:错误查找.

  1. 看打印信息. 在您设置SDK内部log信息执行回调后,SDK执行时会把所有的Log信息给您, 你可以分析原因或发送给我们.

  2. MediaInfo.checkFile:大部分的错误是输入文件路径错误导致的, 您在增加路径的上一行增加MediaInfo.checkFile("你的完成路径");从而打印

  3. 在我们demo上测试.

  4. 向我们发送所有的打印信息, 从initSDK初始化,到出错的地方的所有log信息,

  5. 不要这是一句话或一个视频发过来,让我们看为什么,因为不了解你的场景,很可能彼此需要好长时间沟通

四:图层说明

所有的图层继承自父类图层.  

父类图层支持的功能有

  1. 移动 -------->注释:我们设计了一个容器, 你可以把素材放到容器里 , 从而调整素材在容器中的位置.

  2. 缩放 --------->注释: 同移动属性

  3. 旋转 ---------->注释:同移动属性;

  4. RGBA和透明度调节

  5. 隐藏

  6. 设置显示时间段

  7. 单一滤镜

  8. 同时设置多个滤镜,滤镜级联

  9. 图片遮罩,支持半透明,从而形成融合的效果;

  10. 画面镜像

  11. 区域显示

  12. 圆形显示

  13. 获取图层宽高 , 获取 容器宽高.

  14. 创建子图层 (Android 的视频图层 和Camera图层支持 . ios所有图层都支持)

位置(移动)属性

  • DrawPad的宽高是以像素为单位的, 比如宽度是1280,高度是720,则容器横向坐标有1280个像素,纵向坐标有720个像素点.

  • 当前android的UI界面是像素为单位,但ios的UI界面是以点为单位,请注意.

  • 移动在实质是通过实时的设置每一帧的位置来实现的, 通过不同位置,随着时间的走动,就有了移动的效果;

  • 当一个图层放到容器中, 默认位置是容器的中心点,XY坐标是:getPadWidth()/2; getPadHeight()/2

  • 设置图层的位置, 是设置图层中心点的位置, 注意!!!不是左上角;

  • 如果你要把图层移动到左上方,则设置的位置是:getLayerWidth()/2; getLayerHeight()/2;

  • 如果你要把图层从容器的最左侧移动到最右侧消失:则android代码是(ios类似):

//容器的X坐标最左侧是0;   Y坐标最上侧为0;float percent=progress *1.0f/100f;//百分比;
float posX=(videoLayer.getPadWidth()+videoLayer.getLayerWidth())*percent -videoLayer.getLayerWidth()/2;       
videoLayer.setPosition((int)posX, videoLayer.getPositionY());

缩放属性

  • 当一个图层放到容器中, 拿到图层对象,你再次的设置就是对图层的设置,图层设置不会改变原有素材的尺寸;只是改变的图层尺寸;

  • 和您把一张图片放到UI上,拿到ImageView对象,再次操作图片,则是对ImageView进行的操作,和图片本身已经没有关系。

  • 缩放的是当前图层的宽高,而不是原素材的宽高,

  • 缩放方法1:setScale(); 同时缩放视频的宽高;参数是缩放系数,如setScale(0.5f)则是缩放0.5倍;3.5f则是缩放3.5倍;

  • 理论是缩放没有限制;建议范围在0.01--10.0之间

  • 缩放方法2:setScale(float,float); 分别对图层的宽高进行缩放;

  • 缩放方法3: setScaleValue(int ,int);直接缩放到具体的目标值,比如缩放到容器宽高:setScaleValue(getPadWidth(),getPadHeight());

  • 图层缩放是以当前图层的中心为缩放的中心点;

  • 通过getScaleX/getScaleWidth/getScaleY/getScaleHeight获取到缩放后的值;

  • 缩放设置后,不会对图层原大小有影响;即getLayerWidth和getLayerHeight不变。

旋转属性:

  • 旋转以中心点做旋转中心;

  • 旋转是顺时针旋转;0--360度;

具体图层的另外支持功能

  图片图层:

    • 支持切换图片.

    视频图层

    • 支持倒序, 精确定位, 画面裁剪,画面缩放,循环.

    MV图层

    • 我们定义的一种透明动画视频, 可根据我们的制作说明,把您的各种动画素材做为一层,叠加在别 的 层上面.

    • 支持当 走到文件尾的时候, 设置是否循环/停留最后一帧/消失;

    • 默认是循环

    GIF图层

    • 支持apk自带 gif和外面 绝对路径的gif.

    • GIF默认自动播放.

    Canvas图层/UIView图层

    • Android 端你可以向容器 中 增加一个Canvas, 从而形成一个 Canvas图层 , 您在拿到Canvas对象后, 做各种绘制.

    • IOS端 ,您可以增加 一个 UIView图层, 并绘制您的各种UIView画面.

    ViewLayer (UI图层)

    • 如果您有录制容器的需求,您可以把您的UI界面叠加到容器里, 比如在视频图层上面,从而您的 各种绘制,都会实时的录制下来.

    • 比如 电子白板 ,教育行业 等.

    Camera图层

    • 相机图层, 用来录制视频.具体见我们的CameraLayer类.

五:子图层和声音图层

  • 子图层是拷贝当前图层的画面,而形成完全独立的一个图层,继承自父类图层,支持父类图层的所有方法;

  • 主图层在容器里是相互独立的图层。用来给子图层做一些特效使用,比如我们举例的灵魂出窍,错位,多画面显示,局部静止,录制时的实时滤镜效果等等,

  • 子图层支持在任意时刻增删,移动,缩放,旋转图层操作。

  • 当前Android版本的摄像头图层和 视频图层 支持子图层,子图层支持实时切换滤镜。

  • 当前IOS版本的所有图层都支持 子图层,子图层支持实时切换滤镜。

  • 声音在我们SDK也是一层, 你在addAudioLayer后,会得到一个AudioLayer,可以多次增加,类似多个音频叠加在在一起,可以设置把声音的某段叠加到某个位置.

六: AE模板

  • AE软件:是指Adobe公司出的一款视频编辑软件,(PhotoShop就是他们的),用来做视频动画, 目前绝大部分的视频动画都是此软件创建而成,

  • 你们可以根据这个软件设计好各种动画效果,然后根据我们的插件,把您的动画导出为SDK支持的格式。在手机端,我们SDK会根据导出文件来还原之前的AE效果。

  • 当前大部分的手机编辑APP,都是事先做好各种动画效果,让用户选择图片,编辑文字,选择视频,选择声音,然后在APP中处理,

  • 从而得到各式各样的视频效果。而Ae模板我们认为是最简单最快速的替换方法。

  • android或ios开发者不需要再重复的写各种动画代码, Ae设计师直接在PC端设计好动画效果,用我们提供的插件导出。

  • 开发者在手机端拿到导出文件,送到SDK中,SDK即会还原出各种效果。开发者只需要做引导用户选择图片,视频,声音、文字,然后调用我们SDK即可。

  • 比较传统的绘制动画,AE模板具有:扩展性好,灵活,开发者节省大量的绘制时间,android和ios两端的动画能统一一致。

  • Ae设计师无论做多少种动画效果,开发者只需要一套代码即可完成。

  • android/ios开发者可以对Ae模板做的有:替换Ae模板中的声音,图片,文字,视频,变速,得到所有的文本、图片资源,得到所有的图片图层,

  • 可在SDK处理Ae模板时,对图片,视频做实时的修改编辑;后期增加 得到每一帧的资源位置和每一帧的变换信息.

  • android和ios都支持实时预览和 后台处理。

  • 更多资料, 请参考我们的<<F5蓝松SDK-Ae模板设置规范和相关介绍.PDF>>

七: 时间单位

  • android用到两种时间单位:float类型和long类型;float类型是秒,long类型是微秒,

  • 1秒等于1000*1000微秒;所有时间参数是float类型,即为秒;所有时间参数是long类型,则是微秒;

  • ios用到一种单位:CGFloat类型, 浮点类型,单位秒;

  • 视频在编码中, 我们默认是一秒钟一个IDR帧;

八:滤镜和美颜

  • 提供了大概80多种常见滤镜,包括常用的IFxxx开头的滤镜

  • 每个滤镜都可以实时切换,精确到每一帧;

  • 当前版本android中的滤镜在一个图层容器中使用后,会销毁内部的各种参数, 不能再次放入另一个容器中使用;

  • ios版本的滤镜对象,在前台容器使用后,可以放入后台容器中使用

  • android的录制视频过程中,支持实时滑动切换滤镜.

  • 滤镜属于父类图层的方法, 你可以实时切换单个滤镜,也可以替换多个滤镜.方法:switchFilterTo()是切换单个滤镜,switchFilterList是切换多个滤镜;

  • 每次在切换滤镜的时候, 都要重新创建一个新的滤镜,传递到switchXXX中,不要用已经存在的滤镜对象 ,实际的代码中,你可以用一个map或方法来管理您的多个滤镜.

蓝松短视频SDK使用说明.相关推荐

  1. 蓝松短视频SDK, 更新日志

    我们的口号是: 蓝松短视频 任意个性化. 更新周期: 每三周更新一次, 合作用户任意时刻的提供功能定制 [size=xx-small]我们是杭州蓝松科技, 专业做视频短视频SDK的技术团队. 我们提供 ...

  2. web视频剪辑 在线视频编辑 开发类似:VE视频引擎 美摄sdk VESDK 蓝松短视频SDK 筷子saas剪辑 系统源码

    在线视频编辑 剪辑系统源码 可以批量视频制作 包括ae特效制作**(支持所有AE底层能力)** web视频剪辑 在线视频编辑 VE视频引擎 美摄sdk VE SDK 蓝松短视频SDK 剪辑系统源码 看 ...

  3. 蓝松短视频SDK基本免费功能列表

    下载地址: https://github.com/LanSoSdk/LanSoEditor_common 功能免费. 如需增值,需要技术支持,则收取技术增值和技术支持的费用. F3蓝松视频编辑SDK功 ...

  4. 蓝松短视频SDK 您需要知道的事情

    使用我们的SDK, 您或许知道的几件事: 1,  我们提供的是架构,不是功能. 比喻则是: 架构是给您很多画笔, 你自己作画;    而功能则是直接给你一副画,您拷贝过来就可以了. 2, 用我们SDK ...

  5. 蓝松短视频----更新日志(一直更新中...)

    (这个文章, 因工作忙, 有时文字不会更新到这里, 如果您想全面了解我们的SDK, 请直接下载) 下载地址: android:    https://github.com/LanSoSdk/video ...

  6. 蓝松短视频经验分享----抠图和动画设计

    短视频处理LanSoEditor-SDK之抠图和动画设计 (此介绍,是在和我们客户长期广泛交流的基础上,总结出大部分的客户使用的方法.如果您有新的思路,也可采用,毕竟我们主要是设计架构. 注释:我们的 ...

  7. 杭州蓝松科技---短视频SDK介绍

    蓝松短视频的口号和 更新周期: 我们的口号是:  蓝松短视频  任意个性化. 我们是杭州蓝松科技,  专业做视频短视频SDK的技术团队. 我们提供 Android/IOS平台上的 短视频编辑SDK,  ...

  8. 短视频SDK架构设计,短视频APP开发目标首选

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

  9. 【短视频SDK】Android如何使用硬编硬解?

    为什么要使用硬编硬解? 音频和视频编码时有两种选择:软件编码和硬件编码.软编的效果更好但会占用更多的资源,硬编的效果差一些但占用的资源较少. 同样解码也有两种选择:硬件解码和软件解码.硬解的效果相比软 ...

最新文章

  1. php mysql 连接不上_PHP: 连接状态 - Manual
  2. 阿里巴巴的技术专家,是如何画好架构图的?
  3. 只求规模不管服务?那平台就离死不远了
  4. java中多线程的实现方式
  5. VTK:高亮选择动画用法实战
  6. M. Monster Hunter(树形dp)
  7. sqlserver实现分页的几种方式
  8. springmvc与mybatis整合之实现商品列表
  9. Java描述设计模式(07):适配器模式
  10. python合法的变量名有哪些_Python判断变量名是否合法的方法示例
  11. i++为什么不能作为左值,而++i可以作为左值
  12. linux thinkphp 计划任务_ThinkPHP定时任务项目案例分析
  13. 最小二乘法求线性回归方程_规范解题第14期 利用“最小二乘法”原理解一道题...
  14. 天涯红旗linux,红旗linux安装中的几点技巧(转载)
  15. pos机刷卡显示冲正中是什么意思?如何解决
  16. WebView加载淘宝,天猫链接失败
  17. python_opencv_haze加雾处理
  18. 3.2 基本数据类型
  19. ae制h5文字动画_绝对干货!H5动画制作方法全揭秘
  20. html 全屏撒花的效果,微信里怎么实现撒花效果?

热门文章

  1. word根据关键字盖章(图片)
  2. CET,UTC,GMT,CST几种常见时间概述与关系
  3. 第十九届“华为杯”研究生数学建模竞赛总结
  4. 【文本】HTML5 Canvas渐变色、图案填充文本
  5. 使用python编写mqtt客户端向EMQX服务器发送数据
  6. 前端实现pdf,word,doc等Office文档格式在线预览
  7. 林湾村男子铁路技术职业学院2022年5月ACM校赛初赛题解
  8. C++代码标准参考文献(C++ Coding Standards Bibliography)
  9. Labview中数组与文本文件的相互转化
  10. STM32构建BootLoader实现多系统OTA