本文转自:http://blog.csdn.net/jyt0551/article/details/56063869

视频播放局部缩放、广角平移功能

在预览图片的时候,利用手势控制图片的缩放、平移,已经是智能手机时代最基本的操作。而对于视频,很少有播放器支持这样的操作。实际上,在观看视频的时候,我们可能会想观看某个区域的局部细节,需要把该区域放大来观看,EasyPlayer播放器基于这样的需求,提供了局部放大的功能。

感谢Github上开源库PhotoView,它在ImageView上实现了缩放和平移。EasyPlayer的视频手势控制正是基于这个库来实现的。PhotoView,具体来说,先设置ImageView的ScaleType为MATRIX,然后根据触摸手势的位置坐标,计算出图片转换时相应的Matrix, 再调用ImageView的setImageMatrix方法,实现图片的缩放和平移。需要注意的是,这里手势控制的并不是ImageView本身,而是控制其显示内容。PhotoView的核心算法正是根据手势计算transformation matrix,这里并不打算具体介绍,大家有兴趣的可以直接阅读作者的源代码即可。

EasyPlayer的视频的渲染是通过TextureView来实现的,对我们安卓流媒体音视频的开发者来言,这个View——可在非UI线程进行渲染,也可以提供surface以供MediaCodec硬解码API在底层渲染——应该是很熟悉的了。恰好这个TextuewView也提供了一个setTransform方法,该方法接收一个matrix参数,使用该参数对当前的渲染内容进行转换,下面是官网对该方法的介绍。

Sets the transform to associate with this texture view. The specified transform applies to the underlying surface texture and does not affect the size or position of the view itself, only of its content.

可看出,这里的转换也是针对渲染的内容的转换,而非针对view本身。这样就也避免整个view tree频繁layout,效率非常高。有了这个方法,再加上PhotoView的matrix算法,再对视频进行缩放平移就十分简单了。仅需要在PhotoView里面将ImageView更换为TextureView,把setImageMatrix方法替换为setTransform即可!

效果如下图:

EasyPlayer流媒体播放器介绍

EasyPlayer RTSP是由EasyDarwin开源团队开发 者开发和维护的一个RTSP播放器项目,目前 支持Windows/Android/iOS,视频支持 H.264/H.265/MPEG4/MJPEG,音频支持 G711A/G711U/G726/AAC,支持RTSP over TCP/UDP切换,支持硬解码,是一套极佳的 RTSP播放组件!项目地址: https://github.com/EasyDarwin/EasyPlayer

您也可以升级到我们的EasyPlayer Pro全功能版 本,支持HTTP/RTSP/RTMP/HLS等多种流媒体协议!地址:

https://fir.im/EasyPlayerPro

EasyPlayer版本及源码下载

EasyPlayer Android:

https://github.com/EasyDarwin/EasyPlayer_Android

EasyPlayer其他版本:

https://github.com/EasyDarwin/EasyPlayer

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyPlayer实现视频播放局部缩放、广角平移功能(类似水滴直播,快手视频)的更多相关文章

  1. 利用canvas制作图片(可缩放和平移)+相框+文字

    前言: 公司一个售前问我能不能用H5做一个手机拍照,给相片添加相框和添加文字上传到服务器的功能,我当时一琢磨觉得可行,就利用空余时间做了一个demo,去掉了拍照和上传,如果以后有机会,会给补上,当然对 ...

  2. 使用C++实现图形的旋转、缩放、平移

    编译环境:VS2017 编译框架:MFC 实验内容:显示一个三角形,并将其绕中心进行旋转.缩放以及平移等操作 实验步骤: 1.打开VS2017,并创建MFC项目,具体方法参见:http://www.c ...

  3. 初学Direct X(7) ——位图的旋转,缩放以及平移

    初学Direct X(7) --位图的旋转,缩放以及平移 本文旨在实现通过D3DXMatrixTransformation2D函数实现位图的旋转,缩放以及平移操作,但是具体的原理部分会在后面进一步的探 ...

  4. 使用Martix来实现缩放图片的功能

    使用Martix(android.graphics.Matrix)类中的postScale()方法结合Bitmap来实现缩放图片的功能 Bitmap bmp = BitmapFactory.decod ...

  5. 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

  6. Three.js三维模型几何体旋转、缩放和平移

    创建场景中的三维模型往往需要设置显示大小.位置.角度,three.js提供了一系列网格模型对象的几何变换方法,从WebGL的角度看,旋转.缩放.平移对应的都是模型变换矩阵,关于矩阵变换内容可以观看本人 ...

  7. pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。

    Select rows from a DataFrame based on values in a column -pandas 筛选 https://stackoverflow.com/questi ...

  8. CentOS中实现与Ubuntu下apt-get install build-essential功能类似的命令

    CentOS中实现与Ubuntu下apt-get install build-essential功能类似的命令 在Ubuntu中安装完系统后,可以直接使用apt-get install build-e ...

  9. ChartView与LineSeries搭配实现曲线局部缩放功能

    效果图: 上一篇文章实现的时候还不知道有QtChart这个模块......好好看了下资料就想做个例子实现一下这功能,比较了下代码量...恩,直接看代码: Rectangle { id: view_re ...

随机推荐

  1. 【CF732D】Exams(线性扫描,贪心,二分)

    题意:有m门需要过的课程,n天的时间可以选择复习.考试(如果的d[i]为0则只能复习),一门课至少要复习a[i]天才能通过(可以不连续的复习得到a[i]),问最早什么时候可以把所有课程都通过,如果不能 ...

  2. 线程池之ThreadPoolExecutor线程池源码分析笔记

    1.线程池的作用 一方面当执行大量异步任务时候线程池能够提供较好的性能,在不使用线程池的时候,每当需要执行异步任务时候是直接 new 一线程进行运行,而线程的创建和销毁是需要开销的.使用线程池时候,线 ...

  3. ubuntu下某些文件目录

    1.#include <stdio.h> 2.#include <stdlib.h> stdio.h和stdlib.h的路径:/usr/include

  4. 谈谈 ServletConfig 和 ServletContext

    目录 一.ServletConfig 和 ServletContext 的概念 二.ServletConfig 和 SerlvetContext 代码表示 一.ServletConfig 和 Serv ...

  5. Jython中文乱码问题

    最近,在项目中需要用到Java代用Python的代码,并且需要传参数,因此选用了Jython包,但是,如果在调用python脚本时,出现了中文乱码的现象.代码如下: PythonInterpreter ...

  6. Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析--csdn 曹胜欢

    新接触一个框架的目的就是想利用这个框架来为我们做一些工作,或者是让他来简化我们的工作,利用这个框架无非就是要利用这个框架所给我们提供的API去操作我们的数据,所以利用一个框架的好坏很大一部分取决于你对 ...

  7. 调用tf.softmax_cross_entropy_with_logits函数出错解决

    原来这个函数,不能按以前的方式进行调用了,只能使用命名参数的方式来调用.原来是这样的: tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y ...

  8. Boost.Asio c++ 网络编程翻译(18)

    同步服务端 同步服务端也相当简单.它须要两个线程,一个负责接收新的client.另外一个负责处理已经存在的client. 它不能使用单线程:等带一个新的client是一个堵塞操作,所以我们须要另外一个 ...

  9. 向odoo贡献中文翻译

    建议通过 osc-git向odoo贡献中文翻译     osc-git 是指'开源中国'的git平台. 网址是 http://git.oschina.net/     注册osc-git 账号省略. ...

  10. 关于finfo_file函数获取文件mime值验证出错的问题

    今天在做图片上传 验证图片mime值时 突然发现  个别特殊情况下finfo_file 获取的MIME值不能直接使用, 依照官方的写法是 $finfo=finfo_open(FILEINFO_MIME ...