美摄SDK For Android
3.14.0
|
假设拍摄的视频是竖着拍摄分辨率1280*720,我们生成720*720的视频。
1)创建timeline NvsVideoResolution videoEditRes = new NvsVideoResolution(); videoEditRes.imageWidth = 720; videoEditRes.imageHeight = 720; videoEditRes.imagePAR = new NvsRational(1, 1); NvsRational videoFps = new NvsRational(25, 1); NvsAudioResolution audioEditRes = new NvsAudioResolution(); audioEditRes.sampleRate = 48000; audioEditRes.channelCount = 2; //创建时间线 m_timeline = streamingContext.createTimeline(videoEditRes, videoFps, audioEditRes);
2)创建轨道和片段,path是片段的绝对路径。 NvsVideoTrack videoTrack = m_timeline.appendVideoTrack(); NvsVideoClip clip = videoTrack.appendClip(path);
3)放大视频。 clip.setPanAndScan(0, 1);
详细设置参见摇摄与扫描(Pan and Scan)
4)生成视频,path是生成视频的路径。
m_streamingContext.compileTimeline(m_timeline, 0, m_timeline.getDuration(), path, NvsStreamingContext.COMPILE_VIDEO_RESOLUTION_GRADE_720 , NvsStreamingContext.COMPILE_BITRATE_GRADE_HIGH, 0);
1)创建timeline、轨道、片段同问题1。
2)添加美肤特技。
clip.appendBeautyFx();
3)生成视频。
1)在创建轨道和片段的时候,添加多个素材创建出来多个片段。 NvsVideoTrack videoTrack = m_timeline.appendVideoTrack(); NvsVideoClip clip1 = videoTrack.appendClip(path1); NvsVideoClip clip2 = videoTrack.appendClip(path2); NvsVideoClip clip3 = videoTrack.appendClip(path3); NvsVideoClip clip4 = videoTrack.appendClip(path4); NvsVideoClip clip5 = videoTrack.appendClip(path5);
2)生成视频。
m_streamingContext.compileTimeline(m_timeline, 0, m_timeline.getDuration(), path, NvsStreamingContext.COMPILE_VIDEO_RESOLUTION_GRADE_720 , NvsStreamingContext.COMPILE_BITRATE_GRADE_HIGH, 0));
即可生成1个文件。
简单的画中画,用两个不同分辨率的素材例如一个横着拍摄的素材和一个竖着拍摄的素材,分别添加到两个轨道上,就可以看到两个素材叠加在一起的效果。另外Transform 2D特技可以实现视频的放大缩小、旋转、给视频加透明度。
NvsVideoTrack track1 = m_timeline.appendVideoTrack(); NvsVideoTrack track2 = m_timeline.appendVideoTrack(); NvsVideoClip clip1 = track1.appendClip(path1); NvsVideoClip clip2 = track2.appendClip(path2);
添加水印有两种方式:一是通过贴纸功能来实现的,需要用户发给一张带水印的图片,我们来进行制作。制作完的水印文件是UUID为文件名,.animatedsticker为扩展名的一个文件。有了这个文件,就可以通过我们的API实现添加水印的功能。 StringBuilder m_stickerId = new StringBuilder(); packagePath = "assets:/89740AEA-80D6-432A-B6DE-E7F6539C4121.animatedsticker"; error = m_streamingContext.getAssetPackageManager().installAssetPackage(packagePath, null, NvsAssetPackageManager.ASSET_PACKAGE_TYPE_ANIMATEDSTICKER, true, m_stickerId); if (error != NvsAssetPackageManager.ASSET_PACKAGE_MANAGER_ERROR_NO_ERROR && error != NvsAssetPackageManager.ASSET_PACKAGE_MANAGER_ERROR_ALREADY_INSTALLED) { Log.e(TAG, "Failed to install sticker package!"); }
m_timeline.addAnimatedSticker(0, m_timeline.getDuration(),m_stickerId.toString());
二是通过NvsTimeline类里的addWatermark()接口添加水印。
m_TimeLine.addWatermark(path, 0, 0, 1, NvsTimeline.NvsTimelineWatermarkPosition_TopLeft, 0, 0);//path是水印文件的路径,可以是PNG或JPG文件,或者是.caf格式文件
检查NvsStreamingContext类里的connectCapturePreviewWithLiveWindow()有没有调用或者调用出了问题,亦或是在调用startCapturePreivew()之后,调用了NvsStreamingContext上的stop()。同样,从录制界面到播出界面,播出黑屏,可能是调用playbackTimeline()后,又调用NvsStreamingContext的stop()。还有可能是NvsStreamingContext上的connectTimelineWithLiveWindow方法没有调用或调用出了问题。
NvsClor类成员是Float类型,R,G,B,A取值是0到1,如果所给颜色值是100,100,100,则需要分别除以255。
调用playbackTimeline播出需要预览一段时间,为了避免这个问题,需要先调用seekTimeline到0的位置,再播出,就不会闪黑了。
可能是有些手机播放器不支持自动旋转,会造成视频播放时画面方向不正常,因而导致用户对录制的视频播产生误导。
使用代码混淆时,注意避免对下面的几个类进行混淆,正确避免方式如下:
-keep class com.cdv.** {*;} -keep class com.meicam.** {*;}
单独使用effectsdk时,需要对下面的类进行混淆,正确避免方式如下:
-keep class com.cdv.effect.** {*;} -keep class com.meicam.effect.** {*;}
使用H265进行视频拍摄的用法如下:
Hashtable<String, Object> config = new Hashtable<>(); config.put(NvsStreamingContext.COMPILE_VIDEO_ENCODER_NAME, "hevc"); //h265方式 context.startRecording(filePath, 0, config);
使用H265进行视频生成的用法如下:
Hashtable<String, Object> config = new Hashtable<>(); config.put(NvsStreamingContext.COMPILE_VIDEO_ENCODER_NAME, "hevc"); //h265方式 context.setCompileConfigurations(config);//调用compileTimeline API之前设置 context.compileTimeline(timeline, startTime, endTime, compileVideoPath, NvsStreamingContext.COMPILE_VIDEO_RESOLUTION_GRADE_720, NvsStreamingContext.COMPILE_BITRATE_GRADE_HIGH,0);
Camera1:低等级:360p;中等级:480p;高等级:720p;更高等级:1080p;超高等级:2160p
Camera2:低等级:720p;中等级:720p;高等级:720p;更高等级:1080p;超高等级:2160p
注:SDK会对用户手机系统整体处理能力进行评估,若能够实时处理录制的视频,则采用设置的分辨率等级进行录制;若不能处理,SDK会适当降低当前分辨率等级以匹配用户手机系统能够达到的录制等级。 例如:用某一款手机录制时设置更高等级,但是它可能录制不了这个等级的视频,所以就会适当降低其等级到高甚至是中,所以才会出现有些用户设置的视频录制的等级跟拍摄的视频等级不一致的情况。 同样的,如果使用不带特效录制方式(使用系统相机录制),则会根据相机能够达到的分辨率级别选择适当的分辨率等级。假如相机达不到设置的分辨率等级,可能也会降低相应的分辨率等级来进行录制。
低码率:基础分辨率864 * 480 基础码率1M;中码率:基础分辨率864 * 480 基础码率1.5M;高码率:基础分辨率1280 * 720 基础码率6M 计算规则:实际码率 = (实际分辨率 / 基础分辨率)* 基础码率 例:720p分辨率中等码率为 (1280 * 720) / (864 * 480) * 1.5 = 3.3M