android 播放raw,[Android多媒体技术] 播放Raw/Assets音视频方法总结

2023-10-14 01:10

本文主要是介绍android 播放raw,[Android多媒体技术] 播放Raw/Assets音视频方法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

本文介绍如何通过系统MediaPlayer,IjkPlayer,ExoPlayer分别播放安卓项目下的Raw或Assets文件夹中的音视频文件。

在某些情况下,我们会把一些音视频文件,如Mp3,Mp4等,直接放在安装包中的Raw或者Assets文件夹里,这些音视频文件可能作为特定场景的提示音,或者视频片头等等。关于Raw和Assets资源文件,这里不作过多讨论,总的来讲,他们都是被打包进APK中的文件,不会被编译成二进制,程序可以直接访问,无需额外的权限。

先说明一下本文代码的构建环境和使用的播放内核版本:

Java 1.7

Android Studio 3.1.2

Gradle 4.4

IjkPlayer 0.8.8

ExoPlayer 2.8.3

效果演示

37fef37706d3

Raw/Assets资源文件访问方式

在项目文件夹中的位置:

37fef37706d3

Raw文件访问方式

Raw文件位于res/raw目录下,Raw文件会被映射到R.java文件中,所以访问的时候直接使用资源ID即可,如

R.raw.raw_video

或者获得该文件的AssetFileDescriptor:

AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.raw_video);

Assets文件访问方式

Assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。

AssetManager am = getAssets();

try {

AssetFileDescriptor afd= am.openFd(fileName);

} catch (IOException e) {

e.printStackTrace();

}

AssetFileDescriptor可以理解成访问Raw/Assets文件的一个入口,或者说是一把钥匙。

Raw/Assets文件还有其他的访问方式,比如通过ContentResolver,又或者直接开启一个InputStream去读取文件,这应该是播放器内核需要做的事情,我们只需要给播放器提供以上的信息即可。

·········································································································

下面直接上代码

37fef37706d3

通过系统MediaPlayer播放音视频

Raw文件

//实例化播放内核

android.media.MediaPlayer mediaPlayer = new android.media.MediaPlayer();

//获得播放源访问入口

AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.raw_video); // 注意这里的区别

//给MediaPlayer设置播放源

mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.ge

这篇关于android 播放raw,[Android多媒体技术] 播放Raw/Assets音视频方法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/207087

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消