问题

在项目里面我们使用了ijkplayer0.8.8版本去播放网络视频,发现有一些视频播放时被拉伸了。如下图:

把视频抓下来查明原因,发现是视频metadata里面带了rotation信息,而视频的宽高被调换了。

解决方法

官方的解决方法是给一个ROTATION_CHANGE的回调给上层,然后上层去把View做旋转。这样实在是太麻烦。我但是很奇怪的是ijkplayer本身是基于ffplay做的,而ffplay本身是支持这一类视频的旋转播放的。看了一下ijkplayer的代码,在ff_play.c里面发现如下代码:

if (ffp->autorotate) {double theta  = get_rotation(is->video_st);if (fabs(theta - 90) < 1.0) {INSERT_FILT("transpose", "clock");} else if (fabs(theta - 180) < 1.0) {INSERT_FILT("hflip", NULL);INSERT_FILT("vflip", NULL);} else if (fabs(theta - 270) < 1.0) {INSERT_FILT("transpose", "cclock");} else if (fabs(theta) > 1.0) {char rotate_buf[64];snprintf(rotate_buf, sizeof(rotate_buf), "%f*PI/180", theta);INSERT_FILT("rotate", rotate_buf);}}

原来ffplay本身确实有手动做过transpose的逻辑,但是这个逻辑在ijkplayer里面并没有生效,在ijkmedia/ijkplayer/config.h文件里面CONFIG_AVFILTER选项被关闭了。于是把这个选项打开之后重新编译,视频的播放终于自动旋转了。需要注意的是如果ffmpeg选项里面没有打开avfilter,则需要先去编译打开avfilter的ffmpeg到项目中才行。

总结

本来我一开始是准备在渲染的部分去对MVP做矩阵旋转。这样基本不会增加任何的CPU消耗,不过修改成本比较高一些,而且需要自己维护,考虑到这一类视频本身很少,所以这个成本也就忽略了。

最简单的让IjkPlayer自动旋转带有rotation视频的方法相关推荐

  1. IOS应用开发之自动旋转与调整大小

    苹果的产品iPad和iPhone都是支持自动旋转的,因而我们写的程序也要支持两种视图:纵向和横向. 默认情况下,我们写的程序都是纵向的,就像前边的几个例子中那样.如果运行以前写的程序,当把模拟器旋转, ...

  2. iOS开发:自动旋转与调整大小

    苹果的产品iPad和iPhone都是支持自动旋转的,因而我们写的程序也要支持两种视图:纵向和横向. 默认情况下,我们写的程序都是纵向的,就像前边的几个例子中那样.如果运行以前写的程序,当把模拟器旋转, ...

  3. iphone自动旋转与调整大小

    转自http://my.oschina.net/plumsoft/blog/47289 苹果的产品iPad和iPhone都是支持自动旋转的,因而我们写的程序也要支持两种视图:纵向和横向. 默认情况下, ...

  4. iOS开发7:自动旋转与调整大小

    iOS开发7:自动旋转与调整大小 收藏  分享到 发表于 2012-08-31  •  16285 次查看 苹果的产品iPad和iPhone都是支持自动旋转的,因而我们写的程序也要支持两种视图:纵向和 ...

  5. iOS开发屏幕自动旋转与调整大小

    原文链接地址: http://ytwhw.iteye.com/blog/1767465 在此谢谢原博主的精心整理! 关注小白,共同成长! 苹果的产品iPad和iPhone都是支持自动旋转的,因而我们写 ...

  6. iPhone之横竖屏与自动旋转

    iPhone的自动旋转功能一共有三种方法: 使用自动调整属性处理旋转,利用系统自动生成的代码. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIIn ...

  7. IOS6屏幕旋转详解(自动旋转、手动旋转、兼容IOS6之前系统)

    转自 http://blog.csdn.net/zzfsuiye/article/details/8251060 概述: 在iOS6之前的版本中,通常使用 shouldAutorotateToInte ...

  8. windows禁用屏幕旋转_如何在Windows 10中禁用屏幕自动旋转

    windows禁用屏幕旋转 Windows 10 can automatically rotate your display if you have a convertible PC or table ...

  9. 浏览器自动旋转图片问题的解决方式

    我们在上传拍摄照片的时候 由于手机拍摄角度问题,照片有orientation属性存储旋转角度,在显示照片时,html标签不会对旋转做处理,会导致照片自动旋转了,而使用浏览器打开,由于浏览器会对旋转属性 ...

  10. iOS的横竖屏切换旋转(禁自动旋转)

    这次做了视频的播放器,坑啊 ,好多,这不,刚刚爬上来,就来帮后来者填坑... 首先先说下横竖屏切换旋转的坑吧,,, 1. 在AppDelegate.h文件中 声明一个变量, @property (no ...

最新文章

  1. python字典去重
  2. html省市联动插件,jquery实现的交互体验更友好省市区三级联动插件
  3. 3.1.5 动态分区分配算法
  4. 汇编-子程序参数传递的三种方式-寄存器法,堆栈法,参数赋值法【详述后两者】
  5. Linu解决oracle连接不稳定
  6. 【转】MySQL中select * for update锁表的问题
  7. C#串口SerialPort常用属性方法
  8. 数学里的π究竟牛在哪里
  9. java瞎子_Java学习路线,及各方面知识点
  10. 前端每日实战:151# 视频演示如何用纯 CSS 创作超能陆战队的大白
  11. 2020统计局的行政划分表_湖州市有几个区和县?湖州市2020年县级以上区划名单...
  12. AD9361 介绍 (上)
  13. 推送微信公众号模板消息通知(Java版)
  14. 基于Python的南京二手房数据采集及可视化分析设计
  15. 2021好看小说推荐(持续更新中)
  16. 水果店毛利点计算公式,水果店月度毛利怎么算
  17. 【解决】mac移动硬盘只读错误,不丢失资料
  18. Java实现扑克牌程序(数据结构)
  19. STM32入门(十二)----RCC
  20. Emacs org 转换成freemind

热门文章

  1. 51cto python数据分析系列课程 55g_Python 3 数据分析与挖掘系列课程完整版
  2. CodeForces - 407C C - Curious Array 高阶差分序列
  3. Unity Remote5 使用
  4. 是否应该删除Windows 7 Service Pack备份文件以节省空间?
  5. xp iis访问元数据库失败
  6. 计算机维护费可以跨年吗,税控技术维护费跨年可以抵扣吗_增值税
  7. iapp禁止抓包软件代码
  8. 深度学习与神经网络之 反卷积/转置卷积 (deconvolution/transposed convolution/fractional strided convolution) (upsample)
  9. 51单片机按键:短按,长按,按下执行松开停止
  10. [操作系统] elementary os系统美化插件