问题描述:
在使用qml的MediaPlayer和VideoOutput播放rtsp视频流时,出现debug模式下可以铺满整个屏幕和release模式下视频图像侧边留白的问题,很诧异,明明是同一份代码,难道是编译器优化的结果?
代码:
Rectangle {
id:videoItem
anchors.fill: parent
anchors.margins: 0
border.width: 2
border.color: "red"
MediaPlayer{
id:mediaPlayer
source: "rtsp流地址"
autoPlay: true
}
VideoOutput{
id:videoOutput
source: mediaPlayer
anchors.fill: parent
anchors.margins: 0
fillMode: VideoOutput.FillMode.Stretch//拉满整个屏幕
}
}
尝试:在VideoOutput中设置属性fillMode: VideoOutput.FillMode.Stretch,结果Stretch是未定义;在父类Rectangle中加了边框,发现边框是包含了整个屏幕,应该VideoOutput的anchors.fill: parent没起作用,为啥?
于是在VideoOutput中强行设置width和heigh,这里应该根据系统的屏幕大小来设置,qml中可以通过Screen来获取。
Screen中有两种可以取得屏幕宽高的函数,其中
Sreen.desktopAvailableWidth :组成虚拟桌面的屏幕集合的可用宽度,以像素为单位,不包括窗口管理器保留的区域,如任务栏和系统菜单。如果你想将一个窗口定位在桌面的右侧,你可以像这样绑定它;
Screen.width :屏幕的宽度,以像素为单位。
于是,在VideoOutput中将宽高设置成:
width:Screen.width
height:Screen.height
最后debug和release模式下都测试通过,解决问题!