Qt源码解析-源码解析-QVideoWidget播放手机视频旋转问题
Qt源码解析 索引
Qt源码解析-源码解析-QVideoWidget播放手机视频旋转问题
问题描述与复现
使用手机拍摄的视频是竖屏的,上传后,使用QVideoWidget播放,变成横屏。
总结,可以让播放器能够旋转,即可解决此问题。
测试准备
视频测试地址: http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4
问题分析
QWidget的旋转方法两种,
重载::paintEvent(QPaintEvent *e)函数,使用QTransform实现旋转。
借助QGraphicsView的rotate()函数实现旋转
QVideoWidget不支持旋转。查看setVideoOutput函数进一步获取支持。
void QMediaPlayer::setVideoOutput(QVideoWidget *output) Attach a QVideoWidget video output to the media player. If the media player has already video output attached, it will be replaced with a new one. void QMediaPlayer::setVideoOutput(QGraphicsVideoItem *output) Attach a QGraphicsVideoItem video output to the media player. If the media player has already video output attached, it will be replaced with a new one. void QMediaPlayer::setVideoOutput(QAbstractVideoSurface *surface) Sets a video surface as the video output of a media player. If a video output has already been set on the media player the new surface will replace it.
问题解决方法
当尝试QWidget的旋转方法后,发现并不生效。他们是针对QWidget本身的绘制。
setVideoOutput,采用专用的类后,可以实现旋转。关键代码如下:
//Step 1 m_videoItem = new QGraphicsVideoItem; QGraphicsScene *scene = new QGraphicsScene(this); QGraphicsView *graphicsView = new QGraphicsView(scene); scene->addItem(m_videoItem); //Step 2 m_mediaPlayer->setVideoOutput(m_videoItem); //Step 3 按照中心点旋转 qreal x = m_videoItem->boundingRect().width() / 2.0; qreal y = m_videoItem->boundingRect().height() / 2.0; m_videoItem->setTransform(QTransform().translate(x, y).rotate(angle).translate(-x, -y));
实践问题1:
启动后报错,DirectShowPlayerService::doRender: Unresolved error code 0x80040266 (IDispatch error #102)
安装 LAV Filters,LAV Filters download
Qt源码解析-源码解析-QVideoWidget播放手机视频旋转问题相关推荐
- sharding-jdbc源码解析之sql解析
2019独角兽企业重金招聘Python工程师标准>>> 说在前面 本文转自"天河聊技术"微信公众号 本次介绍的是sharding-jdbc的源码解析部分的sql解 ...
- MyBatis 源码分析 - 映射文件解析过程
1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...
- 深入解析Java字节码和字节码操作类库ASM源码解析
导语 在非黑即白的静态编译语言和动态脚本语言的分类方法中,java的立场显得很尴尬.首先java是静态强类型语言,所以java源代码是需要编译的.但是javac编译后的产出物并不是和传统的编译语言一样 ...
- Dubbo 框架设计与源码解读(配置解析优先级、线程分配、负载均衡、容错方案)
整体框架设计 图例说明: 图中左边淡蓝背景的为服务消费⽅使⽤的接⼝,右边淡绿⾊背景的为服务提供⽅使⽤的接⼝,位于中轴线上的为双⽅都⽤到的接⼝. 图中从下⾄上分为⼗层,各层均为单向依赖,右边的⿊⾊箭头代 ...
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 TaskMasger 启动
1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [四] 上一篇: [flink]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 Jo ...
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 JobMasger启动 YarnJobClusterEntrypoint
1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [三] 上一章:[flink]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yar ...
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yarn 提交过程解析
1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二] 请大家看原文去. 接上文Flink 1.12.2 源码分析 : yarn-per-job模式浅析 [一 ...
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 从脚本到主类
1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一] 可以去看原文.这里是补充专栏.请看原文 2. 前言 主要针对yarn-per-job模式进行代码分析. ...
- Android Fragment 从源码的角度去解析(上)
###1.概述 本来想着昨天星期五可以早点休息,今天可以早点起来跑步,可没想到事情那么的多,晚上有人问我主页怎么做到点击才去加载Fragment数据,而不是一进入主页就去加载所有的数据,在这里自己就对 ...
最新文章
- 脑电图伪迹去除方法汇总
- nacos 集群_Nacos 常见问题及解决方法
- Linux 查看CPU信息,内存等信息
- scrollTop的兼容性小结
- 深入理解ob_flush和flush的区别(转)
- Linux系统如何安装不知名称的软件?
- Win10/Win8快速启动失效/卡logo 的解决方法汇总
- 云服务器怎么多人进去编辑文档,服务器如何设置多人登陆
- python基于百度API的ORC文字识别
- 使用基于迭代的敏捷创建里程碑
- 【深度学习风格化/生成艺术】图像融合--毫无违和
- Python重试机制模块:tenacity
- 依据Right-BICEP要求的对四则运算2的测试
- 利用opencv带你玩转人脸识别-下篇(人脸录入,数据训练,人脸识别小案例快速入门)
- [转]字典学习/稀疏编码
- 2022年山东省安全员C证考试题及在线模拟考试
- 为什么说用PHP开发大型系统令人不爽
- Pandas中describe()函数
- 小梅哥FPGA学习笔记——状态机设计学习
- 高等数学(Calculus II)
热门文章
- elasticsearch—索引与检索(一)
- Android 点击短信链接打开App
- CAN-TP(15765-2协议)网络层协议解析
- java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory
- 11种主要神经网络结构图解
- 第二集 第一魂环 第十章
- Python编程快速上手 让繁琐工作自动化 豆瓣评分[9.00]
- 读书笔记-精准努力-专注专注专注
- 【软考软件评测师】2015年下案例分析历年真题
- linux中查看线程的亲和性