yy头像在线制作网站,网站开发的经济可行性,网站开发后台需要自己写吗,要找做冲压件的厂去哪个网站找开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化 前言一、GSYVideoPlayer#x1f525;#x1f525;#x1f525;是什么#xff1f;二、简单使用1.First、在project下的build.gradle添加2.按需导入3. 常用代码 rtsp流的优化大功告成 总结 前言
本文介绍#xff0c;… 开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化 前言一、GSYVideoPlayer是什么二、简单使用1.First、在project下的build.gradle添加2.按需导入3. 常用代码 rtsp流的优化大功告成 总结 前言
本文介绍开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化 一、GSYVideoPlayer是什么
github地址 https://github.com/CarGuo/GSYVideoPlayer
让我们看看介绍 视频播放器IJKplayer、ExoPlayer、MediaPlayerHTTPS支持支持弹幕支持滤镜、水印、gif截图片头广告、中间广告多个同时播放支持基本的拖动声音、亮度调节支持边播边缓存支持视频本身自带rotation的旋转90,270之类重力旋转与手动旋转的同步支持支持列表播放 直接添加控件为封面列表全屏动画视频加载速度列表小窗口支持拖动动画效果调整比例多分辨率切换支持切换播放器进度条小窗口预览其他一些小动画效果rtsp、concat、mpeg。总结高端大气上档次 让我们看看作者 让我们看看文档
优点
支持好几种开源播放器集大成者可以按需引用所需要的依赖这样一来包体积不会太大作者维护很勤快有什么问题issues作者也会帮忙看看文档写的很清楚不需要额外查资料实在不懂代码拉下来一跑对照着代码基本上就能理解了
缺点
-有一些版本对应会有不同的问题比如我使用的时候用了最新的依赖按照文档不能播放rtsp流降低了依赖过后就可以播放了。
如果想使用其他播放器的可以看看我的这篇文章
安卓的播放器对比与选型vlcEXOplayerIjkplayerGSYVideoPlayer详细过程
二、简单使用
其实按照文档来的话基础使用是完全没问题的我们这边再来复习一下文档真的算比较详细的有没有同感啊家人们
1.First、在project下的build.gradle添加
代码如下示例
allprojects {repositories {...maven { url https://jitpack.io }maven { url https://maven.aliyun.com/repository/public }}
}2.按需导入
为了控制apk包的大小我这边选择按需导入我这里需要播放rtsp流和回放所以我导入了这三个依赖 我使用的versionCatalog 代码如下示例 toml文件如下部分
[versions]
gsyVideoPlayerVersion 7.1.4[libraries]
gsyvideoplayer-java {group com.shuyu, name gsyVideoPlayer-java, version.ref gsyVideoPlayerVersion}
gsyvideoplayer-exo2 {group com.shuyu, name GSYVideoPlayer-exo2, version.ref gsyVideoPlayerVersion}
gsyvideoplayer-ex-so {group com.shuyu, name gsyVideoPlayer-ex_so, version.ref gsyVideoPlayerVersion}[bundles]
gsyvideoplayer [gsyvideoplayer-java,gsyvideoplayer-exo2,gsyvideoplayer-ex-so]
使用 //GSY//基础包implementation libs.gsyvideoplayer.java//是否需要ExoPlayer模式implementation libs.gsyvideoplayer.exo2//更多ijk的编码支持implementation libs.gsyvideoplayer.ex.so基础包是一定要使用的要支持回放所以官方的ExoPlayer会好一点rtsp流的编码支持的so包gsy直接帮我们编译好了直接引入就行还是很方便的也可以直接 libs.gsyvideoplayer我这里只是为了方便解释写了三个顺带一提versioncatlog的plugins好像有问题
3. 常用代码
这是从文档直接拷贝过来的 //EXOPlayer内核支持格式更多
PlayerFactory.setPlayManager(Exo2PlayerManager.class);
//系统内核模式
PlayerFactory.setPlayManager(SystemPlayerManager.class);
//ijk内核默认模式
PlayerFactory.setPlayManager(IjkPlayerManager.class);
//aliplay 内核默认模式
PlayerFactory.setPlayManager(AliPlayerManager.class);//exo缓存模式支持m3u8只支持exo
CacheFactory.setCacheManager(ExoPlayerCacheManager.class);
//代理缓存模式支持所有模式不支持m3u8等默认
CacheFactory.setCacheManager(ProxyCacheManager.class);//切换渲染模式
GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL);
//默认显示比例
GSYVideoType.SCREEN_TYPE_DEFAULT 0;
//16:9
GSYVideoType.SCREEN_TYPE_16_9 1;
//4:3
GSYVideoType.SCREEN_TYPE_4_3 2;
//全屏裁减显示为了显示正常 CoverImageView 建议使用FrameLayout作为父布局
GSYVideoType.SCREEN_TYPE_FULL 4;
//全屏拉伸显示使用这个属性时surface_container建议使用FrameLayout
GSYVideoType.SCREEN_MATCH_FULL -4;
/**** SCREEN_TYPE_CUSTOM 下自定义显示比例* param screenScaleRatio 高宽比如 169*/
public static void setScreenScaleRatio(float screenScaleRatio)//切换绘制模式
GSYVideoType.setRenderType(GSYVideoType.SUFRACE);
GSYVideoType.setRenderType(GSYVideoType.GLSURFACE);
GSYVideoType.setRenderType(GSYVideoType.TEXTURE);//ijk关闭log
IjkPlayerManager.setLogLevel(IjkMediaPlayer.IJK_LOG_SILENT);//exoplayer自定义MediaSource
ExoSourceManager.setExoMediaSourceInterceptListener(new ExoMediaSourceInterceptListener() {Overridepublic MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {//可自定义MediaSourcereturn null;}
});rtsp流的优化
一些ijk设置项在网上搜罗来自己删减添加了几条延时从3秒降到7-800毫秒的样子 /*** time 2023/10/20 10:26* Description: gsy针对ijk播放rtsp流的特殊设置*/private fun setOptionModelList() {val list: MutableListVideoOptionModel ArrayList()//软解码1、打开0、关闭
// val videoOptionMode01 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, videotoolbox, 1)//开启硬解码val videoOptionMode01 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, mediacodec, 0);//rtsp设置 https://ffmpeg.org/ffmpeg-protocols.html#rtspval videoOptionMode02 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, rtsp_transport, tcp)val videoOptionMode03 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, rtsp_flags, prefer_tcp)//设置无packet缓存val videoOptionMode04 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, packet-buffering, 0) //是否开启缓冲// 设置播放前的探测时间 1,达到首屏秒开效果val videoOptionMode05 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, analyzeduration, 1)// 设置播放前的最大探测时间 100未测试是否是最佳值val videoOptionMode06 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, analyzemaxduration, 100)// 每处理一个packet之后刷新io上下文val videoOptionMode07 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, flush_packets, 1)// 视频帧处理不过来的时候丢弃一些帧达到同步的效果val videoOptionMode08 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, framedrop, 5)//设置无packet缓存val videoOptionMode09 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, fflags, nobuffer)val videoOptionMode10 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, mediacodec-auto-rotate, 0)val videoOptionMode11 VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, mmediacodec-handle-resolution-change, 0)list.add(videoOptionMode01)list.add(videoOptionMode02)list.add(videoOptionMode03)list.add(videoOptionMode04)list.add(videoOptionMode05)list.add(videoOptionMode06)list.add(videoOptionMode07)list.add(videoOptionMode08)list.add(videoOptionMode09)list.add(videoOptionMode10)list.add(videoOptionMode11)GSYVideoManager.instance().optionModelList list;}然后播放一下 mBinding.videoPlayer.setUp(it, true, )mBinding.videoPlayer.startPlayLogic()大功告成
总结
本文介绍了开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化。首先介绍了GSYVideoPlayer的特点和优缺点接着详细介绍了其简单使用的步骤和常用代码。最后本文重点介绍了如何对GSYVideoPlayer播放rtsp流进行优化在此过程中介绍了一些常见的设置项最终达成了延时降低的目的。