MediaComposition视频渲染生成MP4文件无法被播放器识别问题求助
代码问题排查点
- 核心对象未实例化
你的代码里两个核心对象只做了声明没有初始化,会导致空引用异常,渲染流程直接中断,生成的是空的损坏文件:MediaComposition mediaComposition;只声明未实例化,需要改为MediaComposition mediaComposition = new MediaComposition();mediaOverlayLayer变量未做实例化就直接调用Overlays.Add方法,你需要在循环生成overlay之前添加mediaOverlayLayer = new MediaOverlayLayer();完成初始化
- 未设置合成视频的基础分辨率
MediaComposition默认没有指定渲染分辨率,会导致生成的视频流参数无效,播放器无法识别。初始化之后需要手动设置宽高:
mediaComposition.CompositeRenderWidth = 1920; mediaComposition.CompositeRenderHeight = 1080;
- 未校验渲染结果
RenderToFileAsync方法会返回MediaCompositionRenderStatus枚举标识渲染结果,你当前没有做校验,无法判断是否发生了编码失败、权限不足等问题,建议修改为:
var renderResult = await mediaComposition.RenderToFileAsync(file, MediaTrimmingPreference.Precise, MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD1080p)); if (renderResult != MediaCompositionRenderStatus.Success) { // 这里可以添加错误提示逻辑,方便定位问题 }
- 补充说明
你当前生成的单段clip时长为90秒,叠加的10个overlay时长也都是90秒,总时长符合规范不会出现时间轴错乱的问题,把上述三个问题修复后即可正常生成可播放的MP4文件。
内容的提问来源于stack exchange,提问作者Jose Afonso Braga
相关产品推荐
相关产品推荐

