类似于抖音等短视频录制功能的SDK接入教程

1.1概述

美摄SDK致力于解决移动端视频开发的技术门槛,使仅有android界面开发经验的程序员,都可以开发出性能优异、渲染效果丰富的的视频录制、编辑功能。我们的优势体现在:

录制、剪辑不限时长

行业最高标准的美颜效果

剪辑、变速实时预览,无需转码

图片、视频混编

生成视频最高支持4K

丰富的转场、滤镜、字幕样式

独家的主题

自定义贴纸功能

支持合拍画中画

1.1 支持格式

输入规范:

视频格式:MP4、MOV、WMV、M2V、MPG

音频格式:MP3、FLAC、AAC、M4A

图片格式:JPG、PNG

视频编码:H264、WMV、MPEG4

音频编码:MP3、AAC、PCM、FLAC

输出规范:

视频格式:MP4

视频编码:H264

音频编码:AAC

扩展包格式(扩展包是美摄用来承载扩展素材的内容包,包括主题、字幕、滤镜、贴纸等):

主题:.theme

字幕:.captionstyle

滤镜:.videofx

贴纸:.animatedsticker

转场:.videotransition

1.2 注意事项

1.2.1 限制

美摄SDK的所有接口必须在UI线程调用,否则可能出现无法预料的错误。只有NvsVideoFrameRetriever类的getFrameAtTime()方法除外。

1.2.2 运行环境

运行环境如下:android studio(必须),android4.1以上版本,api 16

1.2.3 重要提示

目前,安卓仅提供armeabi-v7a指令集的包。这里会产生个问题,部分其他第三方的SDK可能会提供多个指令集so,若此时第三方的客户使用64位的手机,且该应用带64位的so的时候,在loadLibrary时会出现找不到so的错误。 关于指令集的官方文档如下:developer.android.com/n,此链接需要翻墙才可成功。目前SDK提供的指令集:armeabi-v7a,仅提供这个版本是因为这个版本就能够兼容。 为什么报错呢?原因是用户使用的其他第三方包提供了别的指令集的的包,导致比如64位的手机会去找arm64-v8a的包。 这里建议:其他第三方包全部使用armeabi-v7的包。操作方式是在gradle命令行加入

defaultConfig {

ndk {

abiFilters "armeabi-v7a"

}

}

最后:如何查看打的包打入了so呢? 最简单的方法是使用解压工具将apk后缀修改为.zip,直接查看libs里面的so是否打入。

2 快速接入

2.1 导入库文件

如果没有SDK,请从美摄官网:meishesdk.com/doc下载最新andriod开发版本。导入库文件的方式有两种:

方式一: 直接复制。

创建工程后,将NvStreamingSdk_Android_***_***\lib\android_jar文件夹里的两个jar包(NvAndroidStreamingSdk.jar和QtAndroid-bundled.jar),复制到工程的libs文件夹下。 同时在工程的jniLibs文件夹下(没有就创建同名文件夹),创建文件夹名为armeabi-v7a。将NvStreamingSdk_Android_***_***\lib\android_armv7里的所有.so文件,复制到刚刚创建的armeabi-v7a文件夹里。


方式二:通过配置gradle命令行方式导入库。

美摄SDK的samples都是通过配置命令行的方式导入库文件。红线的代码用于将.so和jar包复制到正确的位置。


3 使用说明

3.1 录制

录制的相关接口是在NvsStreamingContext类里,包括采集预览(startCapturePreview()),录制(startRecording()),添加视频采集特效(appendBuiltinCaptureVideoFx())等。强调:美摄SDK所有的类都是以“Nvs”开头。

视频录制时需要注意以下两点:

断点录制:美摄SDK实现断点录制的方式是通过循环调用开始录制(startRecording())和结束录制(stopRecording())实现的。缺点是录制产生了多个文件,需要用户自己维护和删除视频数据, 并需要通过后续的编辑操作将断点录制的文件生成一个完整的新文件。优点是独立文件之间可以加入各种转场特技,避免了因转换场景而造成的视频画面生硬的切换。

带效果录制与不带效果录制:带效果录制即所见即所得,所录制文件的效果就是预览的效果。不带效果录制是预览时使用滤镜或者想要录制1:1的视频,但是录制出的文件是原始的不带滤镜的16:9或9:16的视频, 需要将视频文件在编辑时,再加上滤镜并裁剪到1:1,编辑并生成后得到的视频才会与预览时的视频完全一致。

如果查看录制视频的具体功能实现,建议参考samples里的capture示例,美颜可以参考samples里的beauty示例。

3.1.1 从CaptureDeviceCallback接口派生

录制前,录制的Activity需要实现NvsStreamingContext类的CaptureDeviceCallback接口并重写接口里的所有方法。实现代码如下:

//采集设备回调接口

public class MainActivity extends AppCompatActivity implements NvsStreamingContext.CaptureDeviceCallback {

......//请自行重写所有方法

}

3.1.2 NvsStreamingContext类

NvsStreamingContext是美摄SDK的流媒体上下文类,可视作整个SDK框架的入口。在开始使用美摄SDK的时候,需要先初始化NvsStreamingContext类,然后在其它Activity里使用时 获取NvsStreamingContext的对象,NvsStreamingContext是单例类。在不再使用美摄SDK或者程序退出前销毁NvsStreamingContext类的对象,请务必保证不要中途销毁NvsStreamingContext 类的对象!!!NvsStreamingContext类的第二个参数为授权文件的路径,没有授权文件时给空字符串。

NvsStreamingContext初始化代码如下:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

m_streamingContext = NvsStreamingContext.init(this, null);//初始化Streaming Context

setContentView(R.layout.activity_main);

}

NvsStreamingContext销毁代码如下:

@Override

protected void onDestroy() {

//streamingContext销毁

m_streamingContext = null;

NvsStreamingContext.close();

}

3.1.3 用NvsLiveWindow类预览

录制界面的xml文件里需要使用NvsLiveWindow控件,NvsLiveWindow类是用来录制预览或者编辑预览的。xml文件设置如下:

<com.meicam.sdk.NvsLiveWindow

android:layout_height="match_parent"

android:id="@+id/liveWindow"

android:layout_width="match_parent"

/>

NvsLiveWindow的宽高比应该是1:1,4:3,16:9,9:16等,最好与采集预览startCapturePreview()的参数aspectRatio值保持一致。否则,预览的图像是录制完的视频被裁剪后的图像。 用户设置宽高比,可通过派生NvsLiveWindow类来实现自定义宽高比,代码请参考samples示例edit中的LiveWindow.java。 NvsLiveWindow的填充模式:

public class NvsLiveWindow extends SurfaceView implements SurfaceHolder.Callback

{

//图像按比例均匀填充,必要时进行裁剪(默认模式)

public static final int FILLMODE_PRESERVEASPECTCROP = 0;

//图像均匀地缩放来适合窗口,没有裁剪

public static final int FILLMODE_PRESERVEASPECTFIT = 1;

//图像被缩放来适合窗口

public static final int FILLMODE_STRETCH = 2;

}

对于三种填充模式,图片展示如下:

FILLMODE_PRESERVEASPECTCROP模式:

FILLMODE_PRESERVEASPECTFIT模式:

FILLMODE_STRETCH模式:

另一种预览方式是通过与SurfaceTexture连接,在SurfaceView上预览显示。对应接口如下:

//连接时间线和一个SurfaceTexture对象,该时间线的渲染结果将会输出到这个SurfaceTexture对象上面

public boolean connectTimelineWithSurfaceTexture(NvsTimeline timeline, SurfaceTexture outputSurfaceTexture)

//连接时间线和一个SurfaceTexture对象并设置代理级别,该时间线的渲染结果将会输出到这个SurfaceTexture对象上面

public boolean connectTimelineWithSurfaceTexture(NvsTimeline timeline, SurfaceTexture outputSurfaceTexture, NvsRational proxyScale)

3.1.4 预览前的准备

//给Streaming Context设置采集设备回调接口(必须有)

m_streamingContext.setCaptureDeviceCallback(this);

if (m_streamingContext.getCaptureDeviceCount() == 0)

return;

// 将采集预览输出连接到NvsLiveWindow控件(必须有)

if (!m_streamingContext.connectCapturePreviewWithLiveWindow(m_liveWindow)) {

Log.e(TAG, "Failed to connect capture preview with livewindow!");

return;

}

//采集设备数量判定,如果采集设备是1,不能开启前置摄像头。

if (m_streamingContext.getCaptureDeviceCount() > 1)

m_switchBackFacing.setEnabled(true);

if (m_streamingContext.isCaptureDeviceBackFacing(0))//判断是否为后置采集设备

{

.....

}

3.1.5 开启预览

在启动视频录制之前,要进行视频采集预览。

//启动采集预览

m_streamingContext.startCapturePreview(m_currentDeviceIndex, NvsStreamingContext.VIDEO_CAPTURE_RESOLUTION_GRADE_SUPER_HIGH, 0, m_aspectRatio);

3.1.5.1 带美颜录制和不带美颜录制

采集预览时,可以在预览画面上看到添加的美颜和滤镜。在录制的时候,如果开启带特效录制,录制好的文件是带有美颜和滤镜的画面。如果不开启,则录制好的视频文件没有美颜和滤镜效果, 可以在后续的编辑功能中,再添加美颜和滤镜。若要带特效录制,则startCapturePreview()的flags参数值必须设为NvsStreamingContext.STREAMING_ENGINE_CAPTURE_FLAG_DONT_USE_SYSTEM_RECORDER,否则设为0。

更多请参考: meishesdk.com/doc_ch/ht

3.1.6 录制与停止录制

录制时,文件名是.mov则录制mov格式文件,如果是.mp4则录制mp4格式文件。

m_streamingContext.startRecording(file.getAbsolutePath());//开始录制

m_streamingContext.stopRecording();//停止录制

录制startRecording()的参数outputFilePath是录制视频文件的路径。停止视频录制直接调用stopRecording()即可。

3.1.7 录制参数调节

切换闪光灯:

m_streamingContext.toggleFlash(isChecked);

自动聚焦:

m_streamingContext.startAutoFocus(new RectF(rectFrame));//启动自动聚焦

m_streamingContext.cancelAutoFocus();//取消自动聚焦

设置缩放:

m_streamingContext.setZoom(0.8);// 设置缩放值为0.8


美摄科技公司简介

北京美摄网络科技有限公司是一家专注于移动端视音频SDK自主研发的解决方案提供商。服务内容包括移动端视音频图像智能处理、识别以及深度学习等,服务领域涵盖移动APP、智能手机、智能硬件、广电及通信运营商等行业客户。核心研发团队掌握行业领先技术,曾多次荣获国家科学技术进步一等奖。美摄SDK卓越的视音频解决方案,受到了OPPO、哔哩哔哩、网易、猎豹移动、映客、咪咕、知乎等各领域头部客户的高度认可。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值