首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer

编程知识
2024年09月08日 10:36
GSYVideoPlayer是一个国产的移动端视频播放器,它采用了IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer等四种播放器内核,支持弹幕、滤镜、广告等多项功能。

GSYVideoPlayer的Github主页为https://github.com/CarGuo/GSYVideoPlayer,截止2024年8月18日,该项目的Github星标数为2万,副本数为0.42万,这个成绩算是相当不错的了,要知道FFmpeg项目同期在Github的星标数也才4.44万。
不过在App工程中集成GSYVideoPlayer的话,得注意环境配置以免导入失败。具体的导入操作步骤说明如下:

一、安装Android Studio Jellyfish

虽然GSYVideoPlayer主页没有说明要在哪个版本的Android Studio中导入该库,但在实际操作中发现,即使是前两年推出的Android Studio Dolphin(小海豚版本)都无法正常导入GSYVideoPlayer,就更别说更早的Android Studio了。
若想正常导入并成功调用GSYVideoPlayer,还需安装较新的Android Studio,比如小水母版本的Android Studio Jellyfish。尽管小水母版本的新建App工程采用Kotlin编码,不过GSYVideoPlayer支持Java编码,所以仍然可以在Java代码中调用GSYVideoPlayer。

二、修改App工程的配置

首先打开App项目的settings.gradle,在repositories节点内部补充下面两行仓库配置,以便从指定仓库拉取GSYVideoPlayer库。

maven { url 'https://jitpack.io' }
maven { url "https://maven.aliyun.com/repository/public" }

接着打开App模块的build.gradle,在dependencies节点内部内部补充下面配置,表示引入9.0.0版本的GSYVideoPlayer库。

// 支持Java
implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-java:v9.0.0-release-jitpack'
// 支持ExoPlayer模式
implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-exo2:v9.0.0-release-jitpack'
// 支持AliPlayer模式
implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v9.0.0-release-jitpack'
// 支持arm64指令集
implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-arm64:v9.0.0-release-jitpack'

然后打开App模块的AndroidManifest.xml,补充下面的互联网权限配置:

<uses-permission android:name="android.permission.INTERNET" />

完成以上三处配置修改之后,才能在App代码中使用GSYVideoPlayer的播放器控件。

三、在App代码中使用播放器

GSYVideoPlayer提供了三种播放器控件,分别是NormalGSYVideoPlayer、GSYADVideoPlayer和ListGSYVideoPlayer,它们在App代码中的用法分别说明如下:

1、普通播放器NormalGSYVideoPlayer

NormalGSYVideoPlayer用来播放单个视频文件,在XML文件中放置该控件的代码如下所示:

<com.shuyu.gsyvideoplayer.video.NormalGSYVideoPlayer
    android:id="@+id/video_player"
    android:layout_width="match_parent"
    android:layout_height="300dp" />

2、广告播放器GSYADVideoPlayer

GSYADVideoPlayer用来播放视频文件的片头广告,注意该控件要和NormalGSYVideoPlayer搭配使用。在XML文件中放置该控件的代码如下所示:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.shuyu.gsyvideoplayer.video.NormalGSYVideoPlayer
        android:id="@+id/detail_player"
        android:layout_width="match_parent"
        android:layout_height="300dp" />
    <com.shuyu.gsyvideoplayer.video.GSYADVideoPlayer
        android:id="@+id/ad_player"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:visibility="gone" />
</RelativeLayout>

3、列表播放器ListGSYVideoPlayer

ListGSYVideoPlayer用来播放在时间上按顺序排成列表的若干视频文件,在XML文件中放置该控件的代码如下所示:

<com.shuyu.gsyvideoplayer.video.ListGSYVideoPlayer
    android:id="@+id/detail_player"
    android:layout_width="match_parent"
    android:layout_height="300dp" />

在XML文件中放置上述三个播放器的任意一种控件之后,再回到Java代码执行视频播放操作。以NormalGSYVideoPlayer为例,通过Java播放单个视频文件的代码例子如下:

private static String URL_MP4 = "https://video.zohi.tv/fs/transcode/20240520/8cc/355193-1716184798-transv.mp4";
private NormalGSYVideoPlayer video_player;
private OrientationUtils orientationUtils;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_simple_player);
    video_player = findViewById(R.id.video_player);
    // 设置旋转
    orientationUtils = new OrientationUtils(this, video_player);
    // 设置全屏按键功能,这是使用的是选择屏幕,而不是全屏
    video_player.getFullscreenButton().setOnClickListener(v -> {
        // 不需要屏幕旋转,还需要设置 setNeedOrientationUtils(false)
        orientationUtils.resolveByClick();
    });
    // 不需要屏幕旋转
    video_player.setNeedOrientationUtils(false);
    findViewById(R.id.btn_play_mp4).setOnClickListener(v -> {
        video_player.setUp(URL_MP4, true, "数字中国峰会迎宾曲");
    });
}

然后运行测试App,观察NormalGSYVideoPlayer播放网络视频的效果如下图所示:

因为NormalGSYVideoPlayer的播放内核基于IJKPlayer、EXOPlayer和AliPlayer,默认就支持HLS、RTMP等直播链接,所以无需改动代码,只要把视频地址换成以m3u8结尾的HLS链接,或者以rtmp开头的RTMP链接,即可让NormalGSYVideoPlayer播放直播内容。利用NormalGSYVideoPlayer播放直播视频的效果图如下所示:

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

 


From:https://www.cnblogs.com/aqi00/p/18390374
本文地址: http://www.shuzixingkong.net/article/1826
0评论
提交 加载更多评论
其他文章 Argo CD初体验
什么是 Argo CD? Argo CD 是一个声明式的 GitOps 持续交付工具,用于 Kubernetes 集群。它通过持续监控 Git 仓库中的 Kubernetes 资源配置文件,将这些配置自动应用到指定的 Kubernetes 集群中,确保集群的实际状态与仓库中的配置保持一致。Argo
数据包格式
目录前言请求数据格式请求行请求方法请求头AcceptRefererUser-AgentHOSTX_FORWARDED_FORContent-TypeContent-LengthTransfer-EncodingCookieConnectionAccept-EncodingAccept-Languag
数据包格式 数据包格式
一步一步将PlantUML类图导出为自定义格式的XMI文件
一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08 PlantUML官网: https://plantuml.com/zh/ PlantUML命令行文档: https://plantuml.com/zh/command-line#6a26f5488
C#自定义控件—旋转按钮
C#用户控件之旋转按钮 按钮功能:手自动旋转,标签文本显示、点击二次弹框确认(源码在最后边); 【制作方法】 找到控件的中心坐标,画背景外环、内圆;再绘制矩形开关,进行角度旋转即可获得; 【关键节点】 No.1 获取中心坐标,思考要绘制图形的相对坐标、宽度、高度; No.2 更改坐标系原点,以此原点
C#自定义控件—旋转按钮 C#自定义控件—旋转按钮 C#自定义控件—旋转按钮
八,SpringBoot Web 开发访问静态资源(附+详细源码剖析)
八,SpringBoot Web 开发访问静态资源(附+详细源码剖析) @目录八,SpringBoot Web 开发访问静态资源(附+详细源码剖析)1. 基本介绍2. 快速入门2.1 准备工作3. 改变静态资源访问前缀,定义为我们自己想要的4. 改变Spring Boot当中的默认的静态资源路径(实
八,SpringBoot Web 开发访问静态资源(附+详细源码剖析) 八,SpringBoot Web 开发访问静态资源(附+详细源码剖析) 八,SpringBoot Web 开发访问静态资源(附+详细源码剖析)
红日靶机(一) 笔记
红日靶机(一)笔记 概述 域渗透靶机,可以练习对域渗透的一些知识,主要还是要熟悉 powershell 语法,powershell 往往比 cmd 的命令行更加强大,而很多渗透开源的脚本都是 powershell 的。例如 NiShang,PowerView 等等。这是域渗透的初学靶机。其中也遇到了
红日靶机(一) 笔记 红日靶机(一) 笔记 红日靶机(一) 笔记
Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具
前言 今天大姚给大家分享一个.NET开源、免费的用于管理 Git 存储库的独立图形用户界面(GUI)工具,它还与 Windows 资源管理器和 Microsoft Visual Studio (2015/2017/2019/2022) 集成:Git Extensions。 Git新手指南:从基础到实
Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具 Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具 Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具
万字长文带你窥探Spring中所有的扩展点
写在前面 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。 由spring提供的、
万字长文带你窥探Spring中所有的扩展点 万字长文带你窥探Spring中所有的扩展点