【Android实现 资源路径/手机内存/网络文件 下的视频播放】

业务场景:安卓实现播放视频的功能,支持播放不同类型资源下的视频,下面在使用中封装了一个方法,可以根据需要修改调用

一、直接上封装方法

void videoReady(String videoPath ,String videoType){switch (videoType) {case "network":// 处理网络文件的播放逻辑// videoPath = "http://example.com/video.mp4" (网络视频的URL)videoView = findViewById(R.id.video_view);videoView.setVideoURI(Uri.parse(videoPath));break;case "resource":// 处理资源路径下的文件的播放逻辑// videoPath = "video_example" (资源文件名,例如raw文件夹下的video_example.mp4)videoView = findViewById(R.id.video_view);String packageName = getPackageName();int resId = getResources().getIdentifier(videoPath, "raw", packageName);videoView.setVideoURI(Uri.parse("android.resource://" + packageName + "/" + resId));break;case "local":// 处理手机内置的文件的播放逻辑//  videoPath = "/storage/emulated/0/videos/video.mp4" (手机内部存储的视频文件路径)videoView = findViewById(R.id.video_view);videoView.setVideoPath(videoPath);break;default:// 处理其他情况的播放逻辑videoView = findViewById(R.id.video_view);int resId2 = getResources().getIdentifier("numlive", "raw", getPackageName());videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + resId2));break;}// 初始化VideoViewvideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {// 设置视频填充模式为全屏
//                mp.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);// 设置屏幕为横屏
//                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);mp.setScreenOnWhilePlaying(true);
//                mp.setVolume(0, 0);mp.start();}});}

二、解释

这段代码是一个视频播放器的方法。根据传入的视频路径和视频类型,它会选择不同的播放逻辑。
如果视频类型是"network",则会处理网络文件的播放逻辑。视频路径是网络视频的URL,通过VideoView的setVideoURI方法设置视频的播放地址。
如果视频类型是"resource",则会处理资源路径下的文件的播放逻辑。视频路径是资源文件名,例如raw文件夹下的video_example.mp4。通过获取应用程序的包名和资源ID,然后通过VideoView的setVideoURI方法设置视频的播放地址。
如果视频类型是"local",则会处理手机内置的文件的播放逻辑。视频路径是手机内部存储的视频文件路径,通过VideoView的setVideoPath方法设置视频的播放路径。
如果视频类型不是上述三种情况,则会处理其他情况的播放逻辑。这里使用了一个默认的视频资源作为演示,通过获取应用程序的包名和默认视频资源的ID,然后通过VideoView的setVideoURI方法设置视频的播放地址。
在方法中还有一些其他操作,如设置VideoView的准备监听器,当视频准备好后,会进行一些设置,如设置视频填充模式为全屏、设置屏幕为横屏、设置屏幕常亮等。最后调用MediaPlayer的start方法开始播放视频。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ffmpeg合并视频遇到的坑

下面以Linux环境介绍为主 1.ffmpeg可执行命令不同的环境是不同的,Linux在执行命令前还需要授权。 2.合并视频命令: 主要命令: {} -f concat -auto_convert 0 -safe 0 -i {} -y -c:v copy 坑一:其中第一个花括号替换的是可执行命令所在的…

【GitOps系列】使用Kustomize和Helm定义应用配置

文章目录 使用 Kustomize 定义应用改造示例应用1.创建基准和多环境目录2.环境差异分析3.为 Base 目录创建通用 Manifest4.为开发环境目录创建差异 Manifest5.为预发布环境创建差异 Manifest6.为生产环境创建差异 Manifest 部署 Kustomize 应用部署到开发环境部署到生产环境 使用…

c++ 的引用

c 引用 引用的概念 应用不是重新去定义一个变量,而是给变量取别名。 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间 比如: int a…

OpenCv (C++) 使用矩形 Rect 覆盖图像中某个区域

文章目录 1. 使用矩形将图像中某个区域置为黑色2. cv::Rect 类介绍 1. 使用矩形将图像中某个区域置为黑色 推荐参考博客:OpenCV实现将任意形状ROI区域置黑(多边形区域置黑) 比较常用的是使用 Rect 矩形实现该功能,代码如下&…

打造i-SMART智能网联平台,亚马逊云科技助力上汽快速出海

当前在各大外资车企不断加码在华投资之际,越来越多的中国汽车品牌纷纷开始走出国门,加速推进全球化业务,将赛道转至更为广阔的海外市场。 上汽海外出行科技有限公司(简称“上汽海外出行”)成立于2018年,承…

linux高并发web服务器开发(web服务器)18_函数解析http请求, 正则表达式,sscanf使用,http中数据特殊字符编码解码

pdf详情版 01 学习目标 编写函数解析http请求 ○ GET /hello.html HTTP/1.1\r\n ○ 将上述字符串分为三部分解析出来编写函数根据文件后缀,返回对应的文件类型sscanf - 读取格式化的字符串中的数据 ○ 使用正则表达式拆分 ○ [^ ]的用法通过浏览器请求目录数据 ○…

【unity之IMGUI实践】单例模式管理数据存储【二】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

每日一题——迷宫问题(I)

迷宫问题——I 题目链接 思路 创建二维数组,并实现输入 首先输入二维数组的行和列: int n, m; scanf("%d%d", &n, &m);然后动态开辟二维数组: 注:对动态开辟还不太了解的同学可以看看👉C语言—…

CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、CPU密集型与IO密集型3.1、CPU密集型3.2、I/O密…

opencv-15 数字水印原理

最低有效位(Least Significant Bit,LSB)指的是一个二进制数中的第 0 位(即最低位)。 最低有效位信息隐藏指的是,将一个需要隐藏的二值图像信息嵌入载体图像的最低有效位,即将载体图像的最低有效…

再开源一款轻量内存池

前两天已开源线程池,开源一款轻量线程池项目,本节继续开源另一个孪生兄弟:内存池。 本节的线程池与内存池代码解析会在我的星球详细讲解。 内存池:https://github.com/Light-City/light-memory-pool 线程池:https://gi…

Python案例分析|使用Python图像处理库Pillow处理图像文件

本案例通过使用Python图像处理库Pillow,帮助大家进一步了解Python的基本概念:模块、对象、方法和函数的使用 使用Python语言解决实际问题时,往往需要使用由第三方开发的开源Python软件库。 本案例使用图像处理库Pillow中的模块、对象来处理…

Java设计模式-单例模式

单例模式 1.单例模式含义 单例模式就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。 其实单例模式很好理解,当我们new一个对象实例的时候,这个对象会被放到一个内存中,当我们再次new同一个对象的实例的时候&#xf…

ES6模块化与异步编程高级用法

目录 ES6 模块化 1、什么是 ES6 模块化规范 2、在 node.js 中体验 ES6 模块化 3、ES6 模块化的基本语法 Promise 1. 回调地狱 2、Promise 的基本概念 3、基于回调函数按顺序读取文件内容 4.、基于 then-fs 读取文件内容 4.1 then-fs 的基本使用 4.2 .then() 方法的特…

ZooKeeper原理剖析

1.ZooKeeper简介 ZooKeeper是一个分布式、高可用性的协调服务。在大数据产品中主要提供两个功能: 帮助系统避免单点故障,建立可靠的应用程序。提供分布式协作服务和维护配置信息。 2.ZooKeeper结构 ZooKeeper集群中的节点分为三种角色:Le…

SSH客户端连接远程服务器

目录 一、什么是客户端连接远程服务器 二、什么是服务端连接远程服务器 三、查看网络信息 1、图形程序查看网络信息 2、命令查看网络信息 四、SSH客户端(Linux) 五、SSH客户端(windows) 六、SSH远程服务器 一、什么是客户…

75、简述你对RPC、RMI的理解

简述你对RPC、RMI的理解 RPC:在本地调用远程的函数,远程过程调用,可以跨语言实现 httpClient RMI:远程方法调用,java中用于实现RPC的一种机制,RPC的java版本,是J2EE的网络调用机制&#xff0c…

git如何撤销commit(未push)

文章目录 前言undo commitreset current branch to here Undo Commit,Revert Commit,Drop Commit的区别 是否删除对代码的修改是否删除Commit记录是否会新增Commit记录Undo Commit不会未Push会,已Push不会不会Revert Commit会不会会Drop Com…

jQuery.print打印插件的使用方法

网站新闻内容页面,想只打印新闻内容区域,其他区域不打印,使用了jQuery.print插件,插件下载地址:GitHub - DoersGuild/jQuery.print: Easy to use, Element Printing Plugin for jQuery 插件下载地址:https:…

vue 3.0 如何加载图片

.logo { background: url(~/assets/images/logo.svg) no-repeat center center/contain; width: 117px; height: 24px; margin: 0 20px; } <a class"logo" href"#"></a> 比较实用的书写方式