美摄SDK For iOS  3.10.0
疑难问题集锦
  1. 如何生成方形视频?
  2. 如何生成带有美肤特效的视频?
  3. 如何将多个素材生成一个视频文件?
  4. 如何实现画中画?
  5. 如何添加水印?
  6. 从录制界面到播放界面没有问题,返回之后,录制界面的预览黑屏
  7. NvsColor设置不生效
  8. 从录制界面到播出界面,播出界面的Livewindow闪黑然后播出正常
  9. 某些手机录制的视频播放时画面方向不正常?
  10. android使用美摄SDK时,代码混淆出错?
  11. 使用H265如何设置进行视频拍摄和生成?
  12. 相机采集各档位分别对应的分辨率?
  13. 生成各档位分别对应的码率?

详细解释

1.如何生成方形视频?

假设拍摄的视频是竖着拍摄分辨率1280*720,我们生成720*720的视频。
1)创建timeline NvsVideoResolution videoEditRes; videoEditRes.imageWidth = 720; videoEditRes.imageHeight = 720; videoEditRes.imagePAR = (NvsRational){1, 1}; NvsRational videoFps = {25, 1}; NvsAudioResolution audioEditRes; audioEditRes.sampleRate = 48000; audioEditRes.channelCount = 2; audioEditRes.sampleFormat = NvsAudSmpFmt_S16; //创建时间线 m_timeline = [streamingContext createTimeline:&videoEditRes videoFps:&videoFps audioEditRes:&audioEditRes];

2)创建轨道和片段,path是片段的绝对路径。 NvsVideoTrack videoTrack = [m_timeline appendVideoTrack]; NvsVideoClip clip = [videoTrack appendClip:path];

3)放大视频。 [clip setPan:0 andScan:1];

详细设置参见摇摄与扫描(Pan and Scan)
4)生成视频,path是生成视频的路径。 [m_streamingContext compileTimeline:m_timeline startTime:0 endTime:m_timeline.duration outputFilePath:path videoResolutionGrade:COMPILE_VIDEO_RESOLUTION_GRADE_720 videoBitrateGrade:COMPILE_BITRATE_GRADE_HIGH flags:0];

2.如何生成带有美肤特效的视频?

1)创建timeline、轨道、片段同问题1。
2)添加美肤特技。 [clip appendBeautyFx];

3)生成视频。

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 startTime:0 endTime:m_timeline.duration outputFilePath:path videoResolutionGrade:COMPILE_VIDEO_RESOLUTION_GRADE_720 videoBitrateGrade:COMPILE_BITRATE_GRADE_HIGH flags:0];

即可生成1个文件。

4.如何实现画中画?

简单的画中画,用两个不同分辨率的素材例如一个横着拍摄的素材和一个竖着拍摄的素材,分别添加到两个轨道上,就可以看到两个素材叠加在一起的效果。另外Transform 2D特技可以实现视频的放大缩小、旋转、给视频加透明度。 NvsVideoTrack videoTrack1 = [m_timeline appendVideoTrack]; NvsVideoTrack videoTrack2 = [m_timeline appendVideoTrack]; NvsVideoClip clip1 = [videoTrack1 appendClip:path1]; NvsVideoClip clip2 = [videoTrack2 appendClip:path2];

5.如何添加水印?

添加水印有两种方式:一是通过贴纸功能来实现的,需要用户发给一张带水印的图片,我们来进行制作。制作完的水印文件是UUID为文件名,.animatedsticker为扩展名的一个文件。有了这个文件,就可以通过我们的API实现添加水印的功能。 NSMutableString *m_stickerId; NSString *packagePath = [appPath stringByAppendingPathComponent:"89740AEA-80D6-432A-B6DE-E7F6539C4121.animatedsticker"]; NvsAssetPackageManagerError error = [m_streamingContext.assetPackageManager installAssetPackage:packagePath license:nil type:NvsAssetPackageType_VideoFx sync:YES assetPackageId:m_stickerId]; if (error != NvsAssetPackageManagerError_NoError && error != NvsAssetPackageManagerError_AlreadyInstalled) { NSLog("Failed to install video fx package!"); package1Valid = false; }

[m_timeline addAnimatedSticker:0 duration:m_timeline.duration animatedStickerPackageId:_stickerPackageId];

二是通过NvsTimeline类里的addWatermark()接口添加水印。 [m_timeline addWatermark:path displayWidth:0 displayHeight:0 opacity:1 position:NvsTimelineWatermarkPosition_TopRight marginX:0 marginY:0];//path是水印文件的路径,可以是为PNG或JPG文件,或者是.caf格式文件

6.从录制界面到播放界面没有问题,返回之后,录制界面的预览黑屏

检查NvsStreamingContext类里的connectCapturePreviewWithLiveWindow()有没有调用或者调用出了问题,亦或是在调用startCapturePreivew()之后,调用了NvsStreamingContext上的stop()。同样,从录制界面到播出界面,播出黑屏,可能是调用playbackTimeline()后,又调用NvsStreamingContext的stop()。还有可能是NvsStreamingContext上的connectTimelineWithLiveWindow方法没有调用或调用出了问题。

7.NvsColor设置不生效?

NvsClor类成员是Float类型,R,G,B,A取值是0到1,如果所给颜色值是100,100,100,则需要分别除以255。

8.从录制界面到播出界面,播出界面的Livewindow闪黑然后播出正常

调用playbackTimeline播出需要预览一段时间,为了避免这个问题,需要先调用seekTimeline到0的位置,再播出,就不会闪黑了。

9.某些手机录制的视频播放时画面方向不正常?

可能是有些手机播放器不支持自动旋转,会造成视频播放时画面方向不正常,因而导致用户对录制的视频播产生误导。

10.android使用美摄SDK时,代码混淆出错?

使用代码混淆时,注意避免对下面的几个类进行混淆,正确避免方式如下:

-keep class com.cdv.**  {*;}
-keep class com.meicam.**  {*;}

单独使用effectsdk时,需要对下面的类进行混淆,正确避免方式如下:

-keep class com.cdv.effect.**  {*;}
-keep class com.meicam.effect.**  {*;}

11.使用H265如何设置进行视频拍摄和生成?

使用H265进行视频拍摄的用法如下: NSMutableDictionary *config = [[NSMutableDictionary alloc] init]; [config setValue:"hevc" forKey:NVS_COMPILE_VIDEO_ENCODEC_NAME]; [context startRecording:filePath withFlags:0 withRecordConfigurations:config];

使用H265进行视频生成的用法如下: NSMutableDictionary *config = [[NSMutableDictionary alloc] init]; [config setValue:"hevc" forKey:NVS_COMPILE_VIDEO_ENCODEC_NAME];//h265方式 context.compileConfigurations = config;//调用compileTimeline API之前设置 [context compileTimeline:timeline startTime:0 endTime:timeline.duration outputFilePath:ouputPath videoResolutionGrade:NvsCompileVideoResolutionGrade720 videoBitrateGrade:NvsCompileBitrateGradeHigh flags:0];

警告
并非所有iPhone机都可以支持H265拍摄和生成,如若不支持,则会回到默认设置进行视频拍摄和生成。

12.相机采集各档位分别对应的分辨率?


注:SDK会对用户手机系统整体处理能力进行评估,若能够实时处理录制的视频,则采用设置的分辨率等级进行录制;若不能处理,SDK会适当降低当前分辨率等级以匹配用户手机系统能够达到的录制等级。 例如:用某一款手机录制时设置更高等级,但是它可能录制不了这个等级的视频,所以就会适当降低其等级到高甚至是中,所以才会出现有些用户设置的视频录制的等级跟拍摄的视频等级不一致的情况。 同样的,如果使用不带特效录制方式(使用系统相机录制),则会根据相机能够达到的分辨率级别选择适当的分辨率等级。假如相机达不到设置的分辨率等级,可能也会降低相应的分辨率等级来进行录制。

13.生成各档位分别对应的码率?