本文转自: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. TroubleShoot:网站设置找不到术语管理

    在SharePoint站点中找不到“术语管理”这个链接功能. 解决方案: Enable-SPFeature -id “73EF14B1-13A9-416b-A9B5-ECECA2B0604C” -Ur ...

  2. linux 下 异步IO

    方法一:使用fcntl来置O_ASYNC位. 这个方法的效果是,当输入缓存中的输入数据就绪时(输入数据可读),内核向用F_SETOWN来绑定的那个进程发送SIGIO信号.此时程序应该用getchar等 ...

  3. Python和其他进程的管道通信方式--popen和popen2的比较

    目前有一个查询程序 get_user_id 是用C写的,python需要调用这个程序:使用 get_user_id  "用户名" 可以得到输出: "ID0002451&q ...

  4. AC日记——小木棍【数据加强版】 洛谷 P1120

    题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...

  5. Java 8 Streams的简单使用方法

    Java 8 Streams的简单使用方法 package JDK8Test; import java.util.ArrayList; public class Main { public stati ...

  6. linux下添加定时任务。

    这周要做一个定时增量更新Elasticsearch索引的功能,以前没有做过定时更新,所以请教了下同事,使用crontab添加linux下的定时任务. 一.linux下定时执行任务的方法 在linux中 ...

  7. SMART OS

    http://blog.csdn.net/babyfacer/article/details/8577333

  8. 【Protocol Buffers】grpc默认使用的Google 开源的一套成熟的结构数据序列化机制

    grpc默认使用的Google 开源的一套成熟的结构数据序列化机制 参考地址:https://blog.csdn.net/shensky711/article/details/69696392 参考地 ...

  9. xamarin studio 中SpinButton ComBox Splid 鼠标放上去就会自动接收焦点,然后进行数值变化

    公司做跨平台项目,用XamarinStudio 开发mac版本,语法还是C#,但是,尼玛XamarinStudio的控件就是坑爹啊. 其他的暂时不累赘,笔者画界面,一堆控件放到一个界面上,当超出屏幕时 ...

  10. iOS -- xxxViewController进行pop时直接crash进main.m,EXC_BAD_ACCESS(code=1,address=0x20)

    今天在调试程序时,遇到了奇怪的错误.我从主页跳进(push)一个ViewController时一切正常,但是返回主页(pop)时却crash了,直接跳进了main.m(EXC_BAD_ACCESS(c ...