EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。
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 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.cn/148227.html原文链接:https://javaforall.cn
相关文章
- Pycharm 实现远程部署和调试,原来这么简单「建议收藏」
- 树莓派基于QT实现利用USB转485模块进行串口通讯「建议收藏」
- Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)「建议收藏」
- CSS+HTML 顶部导航栏实现「建议收藏」
- 运算放大电路在音频放大电路中的应用研究与实现「建议收藏」
- 寄存器,移位寄存器的电路原理以及verilog代码实现「建议收藏」
- MQTTnet 实现MQTT 客户端和服务端「建议收藏」
- Android ListView 分组效果实现「建议收藏」
- 基于STM32的嵌入式语音识别模块设计实现「建议收藏」
- LVS实现负载均衡「建议收藏」
- ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略「建议收藏」
- 自定义BeanUtils的populate方法实现「建议收藏」
- 实现数组转对象(reduce)「建议收藏」
- 使用CGlib实现Bean拷贝(BeanCopier)「建议收藏」
- 二叉树中序遍历(非递归)算法实现–C语言「建议收藏」
- 单向链表之删除节点(C语言实现)「建议收藏」
- SPI协议_Verilog实现「建议收藏」
- 深入分析G1垃圾分析器实现原理
- redis实现排行榜功能
- Servlet实现web站点文件下载功能示例详解编程语言
- 利用简单的过滤器 过滤特殊字符实现 防止XSS攻击详解编程语言
- Oracle数据拆分:一键实现数据分箱存储(oracle数据拆分)
- Linux GPIO编程实现快速物联网应用(linux gpio编程)
- Oracle事务实现极致最大时间利用优化(oracle事务最大时间)
- Redis实现的内存高效存储(redis采用什么存储)
- jQuery实现页面滚动时层智能浮动定位实例探讨
- ThinkPHP实现非标准名称数据表快速创建模型的方法
- C++与C#互调dll的实现步骤