当前位置: 首页 > news >正文

android视频播放器之DKVideoPlayer

一个老牌子的播放器了,项目可能已经有些日子没有维护了。但是使用效果还是不错的。支持多种视频格式,及重力感应、调节亮度等多种效果。想来想去,还是记录下来,我会在文章的最后注明github地址:
首先引入依赖:

gradlerepositories {mavenCentral()
}dependencies {# 必选,内部默认使用系统mediaplayer进行解码implementation 'xyz.doikki.android.dkplayer:dkplayer-java:3.3.7'# 可选,包含StandardVideoController的实现implementation 'xyz.doikki.android.dkplayer:dkplayer-ui:3.3.7'# 可选,使用exoplayer进行解码implementation 'xyz.doikki.android.dkplayer:player-exo:3.3.7'# 可选,使用ijkplayer进行解码implementation 'xyz.doikki.android.dkplayer:player-ijk:3.3.7'# 可选,如需要缓存或者抖音预加载功能请引入此库implementation 'xyz.doikki.android.dkplayer:videocache:3.3.7'
}

首先需要引入相关依赖,需要注意,播放器内部默认使用系统MediaPlayer进行解码

 VideoViewManager.setConfig(VideoViewConfig.newBuilder()//使用使用IjkPlayer解码.setPlayerFactory(IjkPlayerFactory.create())//使用ExoPlayer解码.setPlayerFactory(ExoMediaPlayerFactory.create())//使用MediaPlayer解码.setPlayerFactory(AndroidMediaPlayerFactory.create()).build());

然后就是在xml中引入使用:

<xyz.doikki.videoplayer.player.VideoViewandroid:id="@+id/player"android:layout_width="match_parent"android:layout_height="300dp" />

设置播放代码:

videoView.setUrl(URL_VOD); //设置视频地址
StandardVideoController controller = new StandardVideoController(this); 
controller.addDefaultControlComponent("标题", false);
videoView.setVideoController(controller); //设置控制器
videoView.start(); //开始播放,不调用则不自动播放

生命周期的回调:

@Overrideprotected void onPause() {super.onPause();videoView.pause();}@Overrideprotected void onResume() {super.onResume();videoView.resume();}@Overrideprotected void onDestroy() {super.onDestroy();videoView.release();}@Overridepublic void onBackPressed() {if (!videoView.onBackPressed()) {super.onBackPressed();}}

在AndroidManifest.xml中

<activityandroid:name=".PlayerActivity"android:configChanges="orientation|screenSize|keyboardHidden"android:screenOrientation="portrait" /> <!-- or android:screenOrientation="landscape"-->

最后就是关于临时切换解码器的代码:

//使用IjkPlayer解码
mVideoView.setPlayerFactory(IjkPlayerFactory.create());
//使用ExoPlayer解码
mVideoView.setPlayerFactory(ExoMediaPlayerFactory.create());
//使用MediaPlayer解码
mVideoView.setPlayerFactory(AndroidMediaPlayerFactory.create());

到此,是正常的代码使用。下面是github地址:
https://github.com/Doikki/DKVideoPlayer/wiki

不过我在使用时,封装了一个工具类,以及添加阿里云的播放器解码。如果需要请看下面的文章:
DKVideoPlayer播放器之AliyunPlayer解码

相关文章:

android视频播放器之DKVideoPlayer

一个老牌子的播放器了&#xff0c;项目可能已经有些日子没有维护了。但是使用效果还是不错的。支持多种视频格式&#xff0c;及重力感应、调节亮度等多种效果。想来想去&#xff0c;还是记录下来&#xff0c;我会在文章的最后注明github地址&#xff1a; 首先引入依赖&#xff…...

Linux——基础命令(3)

1.Linux——基础命令&#xff08;1&#xff09;-CSDN博客 2.Linux——基础命令&#xff08;2&#xff09; 文件内容操作-CSDN博客 一、打包压缩 打包压缩 是日常工作中备份文件的一种方式 在不同操作系统中&#xff0c;常用的打包压缩方式是不同的选项 含义 Windows 常用 rar…...

MySQL备份恢复

华子目录 MySQL日志管理为什么需要日志日志作用日志文件查看方法错误日志通用查询日志慢查询日志示例 撤销日志重做日志二进制日志---重要中继日志 MySQL备份备份类型逻辑备份优缺点备份内容备份工具导入sql文件 MySQL日志管理 为什么需要日志 用于排错用来做数据分析了解程序…...

鲲鹏麒麟安装离线版MySQL5.7

最近有项目需求&#xff0c;需要在鲲鹏ARM服务器上安装数据库MySQL5.7&#xff0c;服务器为鲲鹏920&#xff0c;操作系统Kylin Linux Advanced Server release V10 (Tercel) 安装包 下载地址&#xff1a;https://cloud.189.cn/t/JRVnmeEvMRZ3&#xff08;访问码&#xff1a;t…...

【不稳定的BUG】__scrt_is_managed_app()中断

【不稳定的BUG】__scrt_is_managed_app函数中断 参考问题详细的情况临时解决方案 参考 发现出现同样问题的文章: 代码运行完所有功能&#xff0c;仍然会中断 问题详细的情况 if (!__scrt_is_managed_app())exit(main_result);这里触发了一个断点很奇怪,这中断就发生了一次,代…...

MyBatis 详解

MyBatis 是一个优秀的 持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射&#xff0c;能够很好地降低 Java 应用程序对数据库操作的复杂性。以下是对 MyBatis 的详细解析&#xff1a; 1. MyBatis 简介 MyBatis 是 Apache 的一款开源框架&#xff0c;其核心特性是…...

Cursor+Devbox AI开发快速入门

1. 前言 今天无意间了解到 Cursor 和 Devbox 两大开发神器,初步尝试以后发现确实能够大幅度提升开发效率,特此想要整理成博客以供大家快速入门. 简单理解 Cursor 就是一款结合AI大模型的代码编辑器,你可以将自己的思路告诉AI,剩下的目录结构的搭建以及项目代码的实现均由AI帮…...

编写按层次顺序(同一层自左至右)遍历二叉树的算法。或:按层次输出二叉树中所有结点;

解&#xff1a;思路&#xff1a;既然要求从上到下&#xff0c;从左到右&#xff0c;则利用队列存放各子树结点的指针是个好办法。 这是一个循环算法&#xff0c;用while语句不断循环&#xff0c;直到队空之后自然退出该函数。 技巧之处&#xff1a;当根结点入队后&#xff0c;会…...

docker 安装mysql8.0.29

docker 安装mysql8.0.29 1、拉取镜像 docker pull mysql:8.0.292、启动容器 docker run -p 3306:3306 --name mysql8.0.29 -e MYSQL_ROOT_PASSWORDroot -d mysql:8.0.29-p 将本地主机的端口映射到docker容器端口(因为本机的3306端口已被其它版本占用&#xff0c;所以使用330…...

vue深入理解输入框字符限制的优化设计

文章目录 深入理解输入框字符限制的优化设计背景与挑战输入框限制的重要性常见需求 多种实现方法解析方法一&#xff1a;基于实时过滤的字符限制方法二&#xff1a;借助正则验证方法三&#xff1a;提交时二次校验 性能优化无障碍设计延伸场景与最佳实践1. 多语言国际化支持2. 动…...

完整指南:在Ubuntu 20.04 ROS 1环境中配置和使用Orbbec SDK

完整指南&#xff1a;在Ubuntu 20.04 ROS 1环境中配置和使用Orbbec SDK 要在Ubuntu 20.04系统中使用ROS 1环境配置和使用Orbbec SDK&#xff0c;可以遵循以下详细且系统化的步骤。这些步骤将引导您从下载必要的工具和SDK到学习如何使用这些资源&#xff0c;确保您能有效地利用…...

【Leetcode Top 100】138. 随机链表的复制

问题背景 给你一个长度为 n n n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 r a n d o m random random&#xff0c;该指针可以指向链表中的任何节点或空节。 构造这个链表的 深拷贝。 深拷贝应该正好由 n n n 个 全新 节点组成&#xff0c;其中每个新节点的值…...

2024年12月HarmonyOS应用开发者基础认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同 更新时间&#xff1a;2024年12月3日 这是基础认证题库&#xff0c;不是高级认证题库注意看清楚标…...

Flink问题总结

目录 1、Flink 的四大特征(基石) 2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法) 3、什么是侧道输出流,有什么用途 4、Flink 中两个流如何合并为一个流 5、Flink 中两个流如何 join 6、Flink 中都有哪些 window,什么是滑动,滚动窗口 7、flink 中都有哪些…...

Day17 C++ vector 容器

2024.12.3 C vector 容器 C vector 容器 类比成数组 C 中的 vector 是一种序列容器&#xff0c;它允许你在运行时动态地插入和删除元素。 vector 是基于数组的数据结构&#xff0c;但它可以自动管理内存&#xff0c;这意味着你不需要手动分配和释放内存。 与 C 数组相比&a…...

常见Linux命令(详解)

文章目录 常见Linux命令文件目录类命令pwd 打印当前目录的绝对路径ls 列出目录内容cd 切换路径mkdir 建立目录rmdir 删除目录touch 创建空文件cp 复制文件或目录rm 移除文件或者目录mv 移动文件与目录或重命名cat 查看文件内容more 文件分屏查看器less 分屏显示文件内容head 显…...

AgGrid 组件封装设计笔记:自定义 icon 以及每个 icon 的点击事件处理

文章目录 问题目前解决效果 v1思路 目前解决效果 v0思路 代码V1 问题 自己封装的 AgGrid 如何自定义传递 icon &#xff0c;以及点击事件的处理&#xff1f; 目前解决效果 v1 思路 目前解决效果 v0 思路 一张图片说明一下 代码 V1 父组件使用 <template><MyPageL…...

vb.net常用命名空间

.NET的命名空间分为两个主要部分。一个是与微软程序语言相关的microsoft,一个是与操作系统相关的system,其中system主要分为应用程序类的命名空间和WEB程序类的命名空间两部分。 下面是常见的命名空间&#xff1a; Microsoft.VisualBasic 包含VB.NET的RUNTIME和编译运行VB程序…...

Netty面试内容整理-Netty 工作原理

Netty 的工作原理主要基于异步、事件驱动的 I/O 模型,结合 Reactor 多线程模式和高效内存管理来实现高并发网络通信。以下是 Netty 的工作原理详细解析: Reactor 线程模型 Netty 基于 Reactor 模式 来处理并发连接和 I/O 操作,主要分为 单线程模型、多线程模型 和 主从多线程…...

CMD 介绍

CMD 介绍 CMD 是 Windows 操作系统中的命令提示符&#xff08;Command Prompt&#xff09;程序&#xff0c;它是一种命令行工具&#xff0c;可以让用户通过键入命令来与计算机进行交互。 DOS: disk operating system, 磁盘操作系统. 是利用命令行来操作计算机. DOS 不是 CMD…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...