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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NestedScrollView+Viewpager+Recycleview的滑动冲突

    NestedScrollView+Viewpager+Recycleview的滑动冲突最新业务需求变化 一个页面多个 Recycleview Viewpager viewpager 实现左右滑动 且可以手动滑动 页面逻辑简单 就是数据比较大 最初的时候实现有滑动冲突 后边使用 NestedScroll 可以实现滑动 但是 Viewpager 不能实现手动滑动 Recycleview 的 item 事件冲突 这个只在华为 7 0 手机上出现 华为 8 0 及三星手机上未发现问题 网上也是各种找 后边看

    2025年7月3日
    0
  • KETTLE教程:转换

    KETTLE教程:转换所谓的转换,可以理解为将数据开中的数据转换为excel表格,txt文档,.bat等格式输出;将excel表格,txt文档,.bat等格式转换成数据库中表格的数据。kettle的转换功能十分便捷,大大减少了我们的工作量。下面开始介绍如何使用kettle进行转换:以文本转换为mysql数据表为例首先,点击文件:在文件中新建→转换然后,点击转换下的DB转换:选择要转换成什么数据…

    2022年5月24日
    43
  • vs2010下载官方下载_怎样下载vs2010

    vs2010下载官方下载_怎样下载vs2010http://www.microsoft.com/downloads/en/results.aspx?freetext=Visual+Studio+2010&displaylang=en&am

    2022年8月4日
    3
  • dsp McBSP模块「建议收藏」

    dsp McBSP模块「建议收藏」McBSP,是多通道缓冲串行接口。在DSP嵌入式系统中,常常用来连接音频编码解码芯片,串行AD/DA器件等。具有如下特性:全双工;两个数据缓冲寄存器;独立的发送和接收帧和时钟;多达129通道的发送和接收等等。McBSP结构图如下:首先对引脚进行介绍:CLKR:接收时钟CLKX:发送时钟CLKS:外部时钟源DR“:串行数据接收DX:串行数据发送

    2022年5月21日
    159
  • nginx purge 根 / 缓存

    nginx purge 根 / 缓存

    2021年8月22日
    56
  • python 自带slic代码分析

    python 自带slic代码分析一 python 中的 slic 函数 defslic image n segments 100 compactness 10 max iter 10 sigma 0 spacing None multichannel True convert2lab None enforce connectivity True min size fact

    2025年7月21日
    0

发表回复

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

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