HarmonyOS鸿蒙Next中XComponent和AVplayer实现视频播放,视频被拉伸
HarmonyOS鸿蒙Next中XComponent和AVplayer实现视频播放,视频被拉伸 设置视频宽度充满屏幕宽度,高度根据固定宽高比。然后出现视频被拉伸,如何设置视频不拉伸?
原因可能是视频的宽高比跟固定的宽高比不匹配,试试将宽高比改为动态的。可以根据视频的宽高比来动态设置XComponent持有Surface的显示区域,一般视频都是1920:1080或者其他比值
更多关于HarmonyOS鸿蒙Next中XComponent和AVplayer实现视频播放,视频被拉伸的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
监听视频状态为prepared时,设置VideoScaleType为VIDEO_SCALE_TYPE_FIT_CROP,保持视频宽高比拉伸至填满窗口,内容可能会有裁剪。参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-media-V13#videoscaletype9
在HarmonyOS鸿蒙Next中,使用XComponent和AVPlayer实现视频播放时,视频被拉伸的问题通常与XComponent的宽高比设置和视频的原始宽高比不匹配有关。XComponent用于渲染视频画面,其宽高比应与视频的原始宽高比保持一致,否则会导致视频被拉伸或压缩。
要解决这个问题,可以通过以下方式调整XComponent的宽高比:
-
获取视频的原始宽高比:在使用AVPlayer加载视频时,可以通过
AVMetadata获取视频的宽度和高度,计算出视频的宽高比。 -
动态调整XComponent的宽高比:根据视频的宽高比,动态设置XComponent的宽高比,确保XComponent的宽高比与视频的原始宽高比一致。可以通过
XComponent的setSize方法调整其大小。 -
保持XComponent的宽高比不变:在布局中确保XComponent的宽高比不会被外部布局强制改变,避免因布局问题导致视频被拉伸。
以下是一个简单的示例代码片段,展示如何根据视频的宽高比调整XComponent的大小:
// 假设已经获取到视频的宽高
let videoWidth = 1920;
let videoHeight = 1080;
let aspectRatio = videoWidth / videoHeight;
// 根据宽高比调整XComponent的大小
let xComponentWidth = 500; // 假设XComponent的宽度为500
let xComponentHeight = xComponentWidth / aspectRatio;
// 设置XComponent的大小
xComponent.setSize({
width: xComponentWidth,
height: xComponentHeight
});
通过这种方式,可以确保视频在XComponent中按原始宽高比显示,避免被拉伸或压缩。


