C# UWP开发中如何设置MediaComposition内MediaClip的开始时间
UWP MediaComposition 设置 MediaClip 指定开始时间方案
MediaComposition 默认按Clips集合的添加顺序连续拼接播放,单个MediaClip没有可直接赋值的起始时间属性,根据你的使用场景可以选择以下两种实现方式:
方案1:顺序无重叠播放场景,添加空白占位Clip
如果你的图片素材按时间先后顺序展示、无重叠需求,可以先创建对应时长的透明空白Clip填充目标开始时间前的空白区间,示例代码:
MediaComposition mediaComposition = new MediaComposition(); TimeSpan targetStartTime = TimeSpan.FromSeconds(3); // 替换为你的图片需要开始展示的时间 TimeSpan showDuration = TimeSpan.FromSeconds(5); // 替换为你的图片需要展示的时长 // 1. 创建对应时长的透明空白占位Clip var placeholderClip = MediaClip.CreateFromColor(Colors.Transparent, targetStartTime); mediaComposition.Clips.Add(placeholderClip); // 2. 创建图片Clip并添加 var clipCover = await MediaClip.CreateFromImageFileAsync(stgCover, showDuration); mediaComposition.Clips.Add(clipCover);
方案2:多素材独立控制/重叠展示场景,使用MediaOverlay
如果你的素材需要独立控制开始时间、甚至重叠展示,更推荐使用MediaComposition.Overlays集合,MediaOverlay自带Delay属性可直接指定在合成中的开始时间,灵活度更高,完全适配你有多张指定时间点素材的需求,示例代码:
MediaComposition mediaComposition = new MediaComposition(); // 先给合成添加底层基础画布,时长设置为你整个项目的总时长即可 var baseClip = MediaClip.CreateFromColor(Colors.Transparent, TimeSpan.FromSeconds(15)); mediaComposition.Clips.Add(baseClip); // 单张图片素材的时间参数,多张素材重复以下逻辑即可 TimeSpan targetStartTime = TimeSpan.FromSeconds(3); // 图片开始展示时间 TimeSpan showDuration = TimeSpan.FromSeconds(5); // 图片展示时长 // 创建图片Clip并封装为MediaOverlay var clipCover = await MediaClip.CreateFromImageFileAsync(stgCover, showDuration); var coverOverlay = new MediaOverlay(clipCover); // 直接指定开始时间 coverOverlay.Delay = targetStartTime; // 按需额外设置展示位置、透明度等参数 // coverOverlay.Position = new Rect(0, 0, 600, 400); // coverOverlay.Opacity = 1; // 添加到合成的Overlay集合 mediaComposition.Overlays.Add(coverOverlay);
内容的提问来源于stack exchange,提问作者Jose Afonso Braga
相关产品推荐
相关产品推荐

