流媒体上下文对象是美摄SDK中核心对象,是美摄SDK功能引擎,美摄SDK所有的核心功能都依附于该对象实现。
流媒体的处理必须有显示部分,美摄SDK做了NvsLiveWindow控件,便捷的对流媒体进行显示。
3.1、说明
流媒体处理是美摄SDK处理的核心,通过美摄SDK,可以方便的对视频进行处理。视频处理最基本的功能是拍摄。拍摄往往和预览联系在一起。
NvsStreamingContext流媒体包装了摄像头拍摄的实现,NvsLiveWindow类封装了摄像头拍摄视频的输出。通过这两个类,方便的进行视频和预览处理。
3.2、原理
流媒体上下文有自己的生命周期。整个SDK的使用应严格遵守SDK本身的生命周期。否则程序运行可能会出现异常。
生命周期有下面函数来组成,拍摄事件发生前,init进行初始化、其中拍摄函数是startCapturePreview。在拍摄事件发生时,调用stop函数,Activity关闭时间,调用close函数。close函数往往在Activiy的onDestory中调用。
3.3、NvsStreamingContext
NvsStreamingContext是流媒体核心处理类,美摄SDK的功能主要通过该类来实现。
流媒体上下文类可视作整个SDK框架的入口。开发过程中,NvsStreamingContext提供了静态sharedInstance接口创建流媒体上下文的唯一实例。 通过这个实例对象,我们可以开启采集设备录制视频,添加采集视频特效,设置拍摄时的各项参数,包括自动聚焦,自动曝光调节, 开关换补光灯等。同时还能够创建时间线,并将时间线与实时预览窗口连接起来,实时预览播放已经拍摄完成的视频。
视频制作完成后,要销毁流媒体上下文的对象实例。 带特效拍摄时,添加素材资源包(采集特效包,场景资源包等),都得先安装,安装成功后获取packageId才能使用,而内建采集特效(builtin)只需获取特效名称即可使用。
sdk接口中凡是需要传入资源、授权等文件路径时一定是全路径。
NvsStreamingContext类中,所有public API除了getAVFileInfo(),detectVideoFileKeyframeInterval(),createVideoFrameRetriever()可以跨线程使用,其他都在UI线程使用!
该类中含有大量内置接口,进行流媒体回调编程使用。
该类函数请参考相关API文档。
3.4、NvsLiveWindow
NvsLiveWindow是美摄SDK自定义的控件,在使用时,通过布局文件进行加载。NvsLiveWindow是Android SurfaceView的增强版。视频处理控制时间,主要通过回调进行实现。SurfaceView主要是动画三维效果实现,NvsLiveWindow可以进行流媒体的处理。
3.4.1、成员函数
public 成员函数:
NvsLiveWindow (Context context)
NvsLiveWindow (Context context, AttributeSet attrs)
NvsLiveWindow (Context context, AttributeSet attrs, int defStyleAttr)
NvsLiveWindow (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
void setFillMode (int fillMode) 设置LiveWindow的填充模式
int getFillMode () 获取LiveWindow的填充模式
PointF mapCanonicalToView (PointF ptCanonical) 时间线坐标转换成视图坐标
PointF mapViewToCanonical (PointF ptView) 视图坐标转换成时间线坐标
PointF mapNormalizedToView (PointF ptNormalized) 归一化坐标转换成视图坐标
PointF mapViewToNormalized (PointF ptView) 视图坐标转换成归一化坐标
void clearVideoFrame () 清除LiveWindow的视频帧
Bitmap takeScreenshot () 截屏
void setBackgro