开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化

这篇具有很好参考价值的文章主要介绍了开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化,开源

前言

本文介绍,开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化


一、GSYVideoPlayer🔥🔥🔥是什么?

github地址: https://github.com/CarGuo/GSYVideoPlayer

让我们看看介绍:
视频播放器(IJKplayer、ExoPlayer、MediaPlayer),HTTPS支持,支持弹幕,支持滤镜、水印、gif截图,片头广告、中间广告,多个同时播放,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频本身自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持,支持列表播放 ,直接添加控件为封面,列表全屏动画,视频加载速度,列表小窗口支持拖动,动画效果,调整比例,多分辨率切换,支持切换播放器,进度条小窗口预览,其他一些小动画效果,rtsp、concat、mpeg。(总结,高端大气上档次)
让我们看看作者:
开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化,开源
让我们看看文档:
开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化,开源

优点

  • 支持好几种开源播放器,集大成者
  • 可以按需引用所需要的依赖,这样一来包体积不会太大
  • 作者维护很勤快,有什么问题issues,作者也会帮忙看看
  • 文档写的很清楚不需要额外查资料,实在不懂代码拉下来一跑,对照着代码基本上就能理解了

缺点:

-有一些版本对应会有不同的问题,比如我使用的时候用了最新的依赖,按照文档不能播放rtsp流,降低了依赖过后就可以播放了。

如果想使用其他播放器的可以看看我的这篇文章

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)详细过程

二、简单使用

其实按照文档来的话基础使用是完全没问题的,我们这边再来复习一下(文档真的算比较详细的有没有同感啊家人们)

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  高宽比,如 16:9
 */
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() {
    @Override
    public MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {
        //可自定义MediaSource
        return null;
    }
});

rtsp流的优化

一些ijk设置项,在网上搜罗来自己删减添加了几条,延时从3秒降到7-800毫秒的样子

    /**
     * @time 2023/10/20 10:26
     * @Description: gsy针对ijk播放rtsp流的特殊设置
     */
    private fun setOptionModelList() {
        val list: MutableList<VideoOptionModel> = ArrayList()
        //开启软解码,硬解码
        val videoOptionMode01 = VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 0);
        //rtsp设置 https://ffmpeg.org/ffmpeg-protocols.html#rtsp
        val 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流进行优化,在此过程中,介绍了一些常见的设置项,最终达成了延时降低的目的。文章来源地址https://www.toymoban.com/news/detail-740751.html

到了这里,关于开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开源音乐播放器!

    导读 音乐是生活的一部分。维基百科关于音乐发展历史的文章有这样一段不错的描述说:“全世界所有的人们,包括哪怕是最孤立、与世隔绝的部落,都会有自己的特色音乐……”好吧,我们开源人就构成了一个部落。我建议我们的“音乐形式”应该包括开源音乐播放器。

    2024年02月08日
    浏览(42)
  • 常用开源播放器整理

    介绍:         ExoPlayer是Google推出的强大的开源媒体播放器,它提供了灵活的API和丰富的功能,支持多种媒体格式和网络流媒体的播放。 官方网站:https://github.com/google/ExoPlayer 开源地址:https://github.com/google/ExoPlayer 库大小:         ExoPlayer 是一个不在 Android 框架内的

    2024年02月13日
    浏览(44)
  • B站播放器播放策略介绍

    AV1 、 HEVC 和 AVC 是目前常用的三种视频编码标准,它们在性能、兼容性和许可方面存在一些差异。下面是这三种编码格式的比较: 1. AV1 (AOMedia Video 1) 效率 :AV1被设计为一种高效的编码格式,比HEVC提供约30%的压缩效率提升。 许可 :AV1是开源和免版税的,这使得它在各种平台

    2024年02月13日
    浏览(55)
  • QT简单的视频播放器

    1.功能 选择路径下的固定视频格式文件播放,对应的音频和视频同步播放 2.新建一个不含UI界面的QT工程 特别注意:QT中的路径名不能含中文   设置一个不含UI界面的工程 取消构建目录 因为要引入视频播放器的模块,我们在pro中引入对应的模块 因为要引入布局格式,所以我们

    2024年02月03日
    浏览(40)
  • Kotlin实现简单的音乐播放器

    关于音乐播放器,我真的是接触比较多,听歌作为我第一大爱好,之前也用Java设计过音乐播放器,感兴趣的同学可以阅读:Android Studio如何实现音乐播放器(简单易上手)和 Android Studio实现音乐播放器2.0 理论知识 掌握Kotlin面向对象的软件开发方面的基础知识。 巩固前期Act

    2024年02月10日
    浏览(38)
  • Android Studio——简单视频播放器

            三个界面:主界面,视频列表界面,视频播放界面,如下图所示:         (1)主界面设计            很简单,就一个背景和一个控件,然后为控件设置点击事件,然后跳转到视频列表界面    activity_main.xml界面  MainActivity.java类           (2)视频列表界面

    2024年02月07日
    浏览(49)
  • qt实现简单的视频播放器

    2024年02月11日
    浏览(54)
  • Django实现简单的音乐播放器 1

    使用django框架开发一个简单的音乐播放器。 效果: 目录 环境准备 安装django 创建项目 创建应用 注册应用 配置数据库 设置数据库配置 设置pymysql库引用 创建数据库 创建数据表 生成表迁移文件 执行表迁移 配置时区 配置语言 配置子应用路由 在player应用目录下创建urls.py文件

    2024年02月12日
    浏览(37)
  • Django实现简单的音乐播放器 2

     在《Django实现简单的音乐播放器 1》前期准备的基础上开始开发。  效果: 目录 项目视图 创建视图方法 路由加载视图 加载模板 创建首页html文件 加载静态资源文件 加载静态文件 使用方法 启动服务器 加载数据表 创建表模型 生成表迁移 执行创建表 插入表数据 播放歌曲列

    2024年02月12日
    浏览(37)
  • Django实现简单的音乐播放器 4

    在原有音乐播放器功能基础上,增加上传音乐功能。  效果: 目录 配置上传路径 配置路由 视图处理歌曲 引入类库 保存歌曲文件 模板上传 设置菜单列表 设置菜单列表样式 脚本设置 上传效果 1.显示菜单列表 2.点击上传歌曲 3.上传完成 4.查看保存文件 增加数据库操作 修改验

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包