EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)「建议收藏」

EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)「建议收藏」EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)在预览图片的时候,利用手势控制图片的缩放、平移,已经是智能手机时代最基本的操作。而对于视频,很少有播放器支持这样的操作。实际上,在观看视频的时候,我们可能会想观看某个区域的局部细节,需要把该区域放大来观看,EasyPlayer播放器基于这样的需求,提供了局部放大的功能。感谢github上开源库PhotoView,它在ImageView

大家好,又见面了,我是你们的朋友全栈君。

EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148227.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • replay视频播放器_怎么让手机音乐跟视频一起放

    replay视频播放器_怎么让手机音乐跟视频一起放以前项目中需要播放在线视频和在线音频,当时就研究了一下。下面只显示核心代码。1.AVPlayer(负责视频操作,例如播放,暂停,声音的大小,跳到指定的时间)2.AVPlayerLayer(负责视频的可视化区域,视频的播放模式,注意是CALayer,不能接手触摸)3.AVPlayItem(表示AVPlayer播放的资源对象,可以监听其状态)全屏的实现有2种方式1.可以

    2022年4月19日
    85
  • 宿主机与目标机_宿主机目标机开发方法原理

    宿主机与目标机_宿主机目标机开发方法原理在嵌入式开发过程中,有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。通常我们用的PC机就是宿主机,而我们用的开发板则是目标机。   我们在宿主机上编译链接生成的软件需要放到目标机上运行,那么怎么放呢?图一则演示了宿主机将软件放到目标机的方式,可以通过串口、网络、USB、JTAG或者JLINK下载到目标机上。如果是

    2022年8月20日
    25
  • 领英群发消息技巧[通俗易懂]

    领英群发消息技巧[通俗易懂]使用Linkedin的人都有群发消息的需求,但Linkedin平台并没有提供群发功能。如果要群发的话,只能把所有好友拉到一个群里再发送。这样,所有的好友都可以在里面聊天,无法做到单独显示的效果。领英精灵注册试用网址:http://linkedinjl.com/r?i=SPSAMR那有没有一种方法,可以实现快速群发并单独显示的效果呢?答案是肯定的,下面就教大家一种方法,实现快速群发消息并单独显示的效果。操作步骤:1.首先需要准备好领英精灵工具,安装后,右侧会有工具操作界面2.再.

    2022年6月3日
    54
  • 解决touchStart滑动时触发点击事件「建议收藏」

    解决touchStart滑动时触发点击事件「建议收藏」由于我们在将点击事件委托到div,span,font,p等元素标签上时会导致移动端的ios设备无法识别这个点击事件(一般指click事件),此时我们一般会使用touchstart来替换click事件,但是使用touchstart来代替click事件的弊端就立刻显示出来,每当我们滑动屏幕时就会立刻出发点击事件此时加入我这个封装的方法,这个弊端就会迎刃而解functiontap(el,fn…

    2022年6月19日
    27
  • 常见SQL面试题_sql索引面试题

    常见SQL面试题_sql索引面试题之前面试遇到一个sql题。当时没写出sql语句,把题目记下。现在分享给大家(知识贵在精,学会举一反三)。这里采用的是mysql.sql语句如下。DROPTABLEIFEXISTS`depart_month`;CREATETABLE`depart_month`(`id`int(11)NOTNULLAUTO_INCREMENT,//id自增长`depa…

    2022年8月29日
    2
  • Spring Batch事务处理

    Spring Batch事务处理之前一直对SpringBatch的使用有些迷糊,尤其是事务这块,经常出些莫名其妙的问题,仔细了解了一下,做个小总结

    2022年5月13日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号