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播放手机视频旋转问题相关推荐

  1. sharding-jdbc源码解析之sql解析

    2019独角兽企业重金招聘Python工程师标准>>> 说在前面 本文转自"天河聊技术"微信公众号 本次介绍的是sharding-jdbc的源码解析部分的sql解 ...

  2. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  3. 深入解析Java字节码和字节码操作类库ASM源码解析

    导语 在非黑即白的静态编译语言和动态脚本语言的分类方法中,java的立场显得很尴尬.首先java是静态强类型语言,所以java源代码是需要编译的.但是javac编译后的产出物并不是和传统的编译语言一样 ...

  4. Dubbo 框架设计与源码解读(配置解析优先级、线程分配、负载均衡、容错方案)

    整体框架设计 图例说明: 图中左边淡蓝背景的为服务消费⽅使⽤的接⼝,右边淡绿⾊背景的为服务提供⽅使⽤的接⼝,位于中轴线上的为双⽅都⽤到的接⼝. 图中从下⾄上分为⼗层,各层均为单向依赖,右边的⿊⾊箭头代 ...

  5. 【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 ...

  6. 【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 ...

  7. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yarn 提交过程解析

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二] 请大家看原文去. 接上文Flink 1.12.2 源码分析 : yarn-per-job模式浅析 [一 ...

  8. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 从脚本到主类

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一] 可以去看原文.这里是补充专栏.请看原文 2. 前言 主要针对yarn-per-job模式进行代码分析. ...

  9. Android Fragment 从源码的角度去解析(上)

    ###1.概述 本来想着昨天星期五可以早点休息,今天可以早点起来跑步,可没想到事情那么的多,晚上有人问我主页怎么做到点击才去加载Fragment数据,而不是一进入主页就去加载所有的数据,在这里自己就对 ...

最新文章

  1. 脑电图伪迹去除方法汇总
  2. nacos 集群_Nacos 常见问题及解决方法
  3. Linux 查看CPU信息,内存等信息
  4. scrollTop的兼容性小结
  5. 深入理解ob_flush和flush的区别(转)
  6. Linux系统如何安装不知名称的软件?
  7. Win10/Win8快速启动失效/卡logo 的解决方法汇总
  8. 云服务器怎么多人进去编辑文档,服务器如何设置多人登陆
  9. python基于百度API的ORC文字识别
  10. 使用基于迭代的敏捷创建里程碑
  11. 【深度学习风格化/生成艺术】图像融合--毫无违和
  12. Python重试机制模块:tenacity
  13. 依据Right-BICEP要求的对四则运算2的测试
  14. 利用opencv带你玩转人脸识别-下篇(人脸录入,数据训练,人脸识别小案例快速入门)
  15. [转]字典学习/稀疏编码
  16. 2022年山东省安全员C证考试题及在线模拟考试
  17. 为什么说用PHP开发大型系统令人不爽
  18. Pandas中describe()函数
  19. 小梅哥FPGA学习笔记——状态机设计学习
  20. 高等数学(Calculus II)

热门文章

  1. elasticsearch—索引与检索(一)
  2. Android 点击短信链接打开App
  3. CAN-TP(15765-2协议)网络层协议解析
  4. java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory
  5. 11种主要神经网络结构图解
  6. 第二集 第一魂环 第十章
  7. Python编程快速上手 让繁琐工作自动化 豆瓣评分[9.00]
  8. 读书笔记-精准努力-专注专注专注
  9. 【软考软件评测师】2015年下案例分析历年真题
  10. linux中查看线程的亲和性