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

本文详述了在Android应用中如何利用系统MediaPlayer、IjkPlayer和ExoPlayer播放Raw或Assets文件夹内的音视频。通过示例代码展示了AssetFileDescriptor的获取和播放器的设置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本文介绍如何通过系统MediaPlayerIjkPlayerExoPlayer分别播放安卓项目下的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

效果演示

Raw/Assets资源文件访问方式

在项目文件夹中的位置:

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去读取文件,这应该是播放器内核需要做的事情,我们只需要给播放器提供以上的信息即可。

·········································································································
下面直接上代码

通过系统MediaPlayer播放音视频

  • Raw文件
//实例化播放内核
android.media.MediaPlayer mediaPlayer = new android.media.MediaPlayer();
//获得播放源访问入口
AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.raw_video); // 注意这里的区别
//给MediaPlayer设置播放源
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
//设置准备就绪状态监听
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
   
    @Override
    public void onPrepared(MediaPlayer mp) {
   
         // 开始播放
         mediaPlayer.start();
     }
});
//准备播放
mediaPlayer.prepareAsync();
  • Assets 文件
//实例化播放内核
android.media.MediaPlayer mediaPlayer = new android.media.MediaPlayer();
//获得播放源访问入口
AssetManager am = getAssets();
try {
   
    AssetFileDescriptor afd = am.openFd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值