首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法在Exoplayer中播放android扩展文件OBB中的OGG音频文件

ExoPlayer是一个开源的Android媒体播放器库,它提供了强大的功能和灵活的定制选项。然而,ExoPlayer默认情况下不支持直接播放存储在Android OBB扩展文件中的OGG音频文件。为了在ExoPlayer中播放这些文件,我们需要进行一些额外的步骤。

首先,我们需要将OGG音频文件从OBB扩展文件中解压出来。Android提供了一个名为APKExpansionSupport的类,可以帮助我们访问OBB扩展文件。我们可以使用该类的getAPKExpansionZipFile()方法获取到OBB文件的ZipResourceFile对象,然后使用ZipResourceFile对象的getInputStream()方法获取到OGG音频文件的输入流。接下来,我们可以将输入流写入到应用程序的本地存储中,例如内部存储或外部存储。

一旦我们将OGG音频文件解压到本地存储中,我们可以使用ExoPlayer来播放它。首先,我们需要创建一个MediaSource对象,用于指定要播放的媒体文件。对于OGG音频文件,我们可以使用ProgressiveMediaSource类,并将解压后的本地文件路径传递给它。然后,我们可以将MediaSource对象传递给ExoPlayer的prepare()方法进行准备。最后,我们可以调用ExoPlayer的setPlayWhenReady()方法开始播放音频。

以下是一个示例代码,演示了如何在ExoPlayer中播放存储在Android OBB扩展文件中的OGG音频文件:

代码语言:txt
复制
// 导入所需的类
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.upstream.FileDataSourceFactory;
import com.google.android.exoplayer2.upstream.ZipResourceFile;

// 获取OBB扩展文件的ZipResourceFile对象
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, mainVersion, patchVersion);
// 获取OGG音频文件的输入流
InputStream inputStream = expansionFile.getInputStream("path/to/ogg/file.ogg");
// 将输入流写入本地存储
File outputFile = new File(context.getFilesDir(), "file.ogg");
OutputStream outputStream = new FileOutputStream(outputFile);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, length);
}
outputStream.close();
inputStream.close();

// 创建ExoPlayer实例
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context);
// 创建数据源工厂
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(context, "user-agent");
// 创建媒体源
ProgressiveMediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(outputFile.toUri());
// 准备播放器
player.prepare(mediaSource);
// 开始播放
player.setPlayWhenReady(true);

在上述示例代码中,我们首先使用APKExpansionSupport类获取到OBB扩展文件的ZipResourceFile对象。然后,我们使用该对象的getInputStream()方法获取到OGG音频文件的输入流,并将其写入到应用程序的本地存储中。接下来,我们创建了ExoPlayer的实例,并使用DefaultDataSourceFactory类创建了数据源工厂。然后,我们使用ProgressiveMediaSource.Factory类创建了媒体源,并将解压后的本地文件路径传递给它。最后,我们调用了ExoPlayer的prepare()方法准备播放器,并调用了setPlayWhenReady()方法开始播放音频。

这是一个基本的示例,你可以根据自己的需求进行定制和扩展。希望对你有帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发如何使用OpenSL ES库播放解码后pcm音频文件

支持pcm数据采集和播放 支持播放音频数据来源广泛,res、assets、sdcard、在线网络音频以及代码定义音频二进制数据   和Android提供AudioRecord和AudioTrack...因为AudioRecord和AudioTrack都是Android提供Java API,无论是采集还是播放音频,都需要将音频数据从java层拷贝到native层,或从native层拷贝到java层,这无疑是十分消耗资源...如果希望减少拷贝,开发更加高效Android音频应用,则建议使用Android NDK提供OpenSL ES API接口,它支持native层直接处理音频数据。...link to the target library android log OpenSLES )   java层只需获取到要播放pcm...absolutePath+File.separator+"input.pcm" playPcmBySL(pcmPath)   需要注意是,pcm文件可以通过使用ffmpeg解码mp3文件得到,但是解码时候需要注意

21310

使用 FPGA 播放 SD 卡音频文件

使用 FPGA 播放音频(一) 这篇重点:如何从 SD 卡读取音频文件并将其输出到扬声器上。 开篇第一步 在上一篇教程,创建了一个 I2S 发送器用来发送来从FPGA内部 ROM 音频数据。...设计必须实现以下组件: 用于为 I2S 发送器创建输入时钟时钟预分频器 AXI-Stream 从接口 I2S发送器控制逻辑‌ 为分频器创建了一个过程,该过程MCLK时钟上升沿对计数器进行计数,并在半个周期后切换信号...输出时钟可以通过 AXI-Lite 接口适应音频文件采样率。 AXI-Stream FIFO 充当处理系统和 I2S 发送器之间链接。...读取 SD 卡需要 Xilinx xilffs FAT 库,该库必须集成到 Vitis 项目的板级支持包(不要忘记启用LFN支持大文件选项): 第一步,软件使用该AudioPlayer_Init...当从处理系统到 FIFO 传输完成时,会触发TC中断(传输完成),并从 SD 卡读取下一个数据块。之后重复进行上面步骤,直到文件完全播放

25410
  • 4款知名播放器比较:ijkPlayer、VLC、SmartPlayer、ExoPlayer

    ,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。...]支持播放过程,实时静音/取消静音; [实时音量调节]支持播放过程实时调节音量; [实时快照]支持播放过程截取当前播放画面; [只播关键帧]Windows平台支持实时设置是否只播放关键帧;...ExoPlayer ExoPlayer 是google推出开源播放器,主要是集成了Android 提供一套解码系统来解析视频和音频,将MediaCodec封装地非常完善,形成了一个性能优越,播放稳定性较好一个开发播放器...; VLC对点播支持比较好,但是工程庞大,接入或二次开发难度比较大; SmartPlayer对RTSP和RTMP直播播放支持非常优秀,毫秒级延迟,稳定性比较好; ExoPlayer不太适合直播,视频解码无法接入软解...,可扩展性一般,而且只支持Android平台。

    8.1K70

    PHP操作文件扩展属性

    PHP操作文件扩展属性 操作系统文件,还存在着一种我们可以自己定义文件属性。这些属性不是保存在文件内容,也不是直接可以通过 ls -al 所能看到内容。...它们可以将一个键值对信息永久得关联到文件上,一般现在 Linux 系统都支持这样文件扩展属性功能。操作系统我们可以通过 setfattr、 getfattr、 attr 这些命令来操作它们。...配合上面的 xattr_list() 函数就可以获取某个文件所有扩展属性信息。如果我们不增加 XATTR_ROOT 参数的话,是无法读取到 root命名空间 内容。...总结 今天内容非常地简单浅显,这个文件扩展属性功能说实话也是看到 PHP 中有这个功能扩展才回去查看了 Linux 系统相关文档。...测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/9.PHP操作文件扩展属性.php 参考文档

    2.2K20

    ExoPlayer播放音视频使用介绍

    ExoPlayer是一款开源应用级媒体播放器,基于Android低级媒体API构建。本指南描述了ExoPlayer库及其使用。它是指ExoPlayer主要演示应用程序代码,以提供具体示例。...更少设备特定问题以及不同设备和Android版本行为差异更小。 Android 4.4(API级别19)及更高版本上支持Widevine通用加密。 您可以根据使用情况来自定义和扩展播放器。...(1)将ExoPlayer添加为依赖项 入门第一步是确保您项目根目录build.gradle文件包含JCenter和Google存储库。...有关详细信息,请浏览 扩展目录 及其各自README文件。 (2)创建播放器 您可以使用ExoPlayerFactory创建一个ExoPlayer实例。...(1)从侧面加载字幕文件 给定一个视频文件和一个单独字幕文件,可以使用 MergingMediaSource 将它们合并到单个播放

    6.4K20

    Android 音频播放速率调整实现

    MediaPlayer 播放音频最先想到就是MediaPlayer这个Android提供原生API了,Android 6.0+(23+)MediaPlayer可以通过setSpeed来改变播放速率...代码,我们需要: // 设置音乐播放速度 public static void changeplayerSpeed(float speed) { if (mPlayer == null...以前,需要另想办法处理,后续查到好方法再补充 } } 实际实现过程 ,我发现手上测试机Honor V9执行该操作后 ,播放静默了 ,不仅没有实现播放速率切换,播放也不能恢复。...实际实现过程 ,seekTo正常,播放速率切换也正常(只是切换到慢速0.5x时候存在重音情况),但是播放不了https开头url音频文件,搜索了一下需要自己编译ijkplayer源码以支持https...表现正常,而且切换播放速率时,没有重(chong)音情况,但没有6.0以下设备上测试过。

    1.2K10

    Android多媒体应用使用MediaPlayer播放音频

    Android提供了对常用音频和视频格式支持,它所支持音频格式有MP3(.mp3)、3GPP(.3gp)、Ogg(.ogg)和WAVE(.ave)等,支持视频格式有3GPP(.3gp)和MPEG-...通过AndroidAPI提供相关方法,Android可以实现音频与视频播放。 下面介绍使用MediaPlayer播放音频 Android,提供了MediaPlayer类来播放音频。...使用MediaPlayer类播放音频比较简单,只需要创建该类对象,并为其指定要播放音频文件,然后调用该类start()方法即可,下面进行详细介绍。...使用setDataSource()方法装载音频文件后,实际上MediaPlayer并为真正装载该音频文件,需要调用MediaPlayerprepare()方法去真正装载音频文件。...(); 下面做一个小实例,实现包括播放、暂停/继续和停止功能简易音乐播放器 将要播放音频文件上传到SD卡Music目录,这里要播放音频文件为Whistle.mp3 目录如图 布局文件,包括一个文本信息显示控件和三个按钮

    1.5K40

    音视频开发之旅(44)-ExoPlayer介绍及简单使用

    ExoPlayer 支持基于 HTTP 动态自适应流 (DASH)、SmoothStreaming 和通用加密、以及可以很好支持播放队列、播放无缝切换等功能。它采用易于自定义和扩展设计。...ExoPlayer没有设定可以播放媒体类型、存储方式以及渲染方式,也没有直接实现加载和播放。而是播放器被创建或者准备播放时将这些工作代理给注册组件来实现。...我们日常项目开发,开发一个组件 从易用性和以扩展性方面考虑,既要保证使用者很容易上手使用(提供一套默认实现),又要有方便使用者根据自己场景进行方便扩展能力。...STATE_ENDED: 播放完了所有的资源后处于改状态 二、ExoPlayer简单使用 这一小节我们学习实践ExoPlayer使用 2.1 AS引入library ExoPlayer有很好扩展性和可定制性...,Mainfest静态注册后,requesetPermission动态请求下。

    7.7K00

    【HTML5】HTML5 多媒体标签 ① ( audio 音频标签 | 音频标签常见属性值设置 | 音频标签默认代码设置 | 音频标签设置多种类型音频文件 )

    / mp3 ; Safari 3.0 : mp3 / wav ; 可以 音频标签 ogg 和 mp3 两种格式标签 , 所有的浏览器都可以播放音频 ; audio 标签常用属性...不同播放器 , 显示操作空间是不同 , 风格无法做到统一 ; loop 属性 : 值为 loop , 音频循环播放 ; 设置 loop="loop" 就会循环播放 ; 三、音频标签代码示例...ogg 格式音频文件 ; 如果浏览器支持 ogg播放ogg 文件 ; 如果不支持 ogg 格式 , 则继续读取下一行 ; 第三个 source 标签 配置是 wav 格式音频文件 ;...mp3 就播放该 mp3 文件 - 如果不支持 mp3 格式 , 则继续读取下一行 第二个 source 标签配置ogg 格式音频文件...- 如果浏览器支持 ogg播放ogg 文件 - 如果不支持 ogg 格式 , 则继续读取下一行 第二个 source 标签配置是 wav 格式音频文件

    5.4K40

    ExoPlayer 多路流切换

    这种播放器只能使用重启播放器方式实现码流切换。ExoPlayer作为开源播放器,具备很好扩展性,既支持DASH/HLS切换,同时也支持解码器重启方式切换。...所谓多路流是指播放过程,存在多个I/O相关媒体资源。对于常见Mp4而言,一般来说既包括音频轨道,又包括视频轨道,解封装之后,一路进入音频渲染器,一路进入视频渲染器,属于典型两路流。...而ExoPlayer本质上是支持多路流,可以同时支持多个Mp4、多个音频文件、多种语言版本歌词。...四、对齐 4.1 对齐流程 本文所说对齐和DASH、HLS有本质区别,不存在切片,但是仍然要解决对齐问题,ExoPlayer对齐过程并没有直接去调用seek方法对齐,而是通过SeekPoint...开始位置,也是IDR帧位置(IDR帧是I帧一种);一般来说Mp4 文件头部有moov信息,从采样表(sample table)可以查找出关键帧和关键帧所映射文件位置信息,采样表会在起播阶段完成解析

    1.2K31

    YouTube开源播放器中文使用指南

    贰·ExoPlayer优缺点 优点 不同Android版本和不同手机设备上拥有更统一行为表现,更少设备差异带来问题。 作为一个独立库,可以很轻易升级。...可以根据用户需求方便播放器行为进行定制和扩展ExoPlayer很多组件都支持自定义和扩展。 支持播放视频列表,并且可以支持对视频裁剪、合并,以及循环播放设置。...添加ExoPlayer依赖 首先我们要保证项目根目录build.gradle包含Google和JCenter仓库: repositories { google() jcenter...() } app modulebuild.gradle添加对ExoPlayer依赖: implementation 'com.google.android.exoplayer:exoplayer...我们可以直接在我们布局文件引用PlayerView。

    3.9K20

    HTML音频操作

    HTML5 浏览器播放音频     如视频播放一样,HTML5出现之前我们要想在浏览器播放音频,没有一个官方浏览器遵循播放标准(也就是没有提供一个可以专门来处理音频HTML标签),我们依然需要使用适用于各种浏览器音频播放插件才可以...HTML5 正式发布后,他给我们提供了处理音频标准方法:audio 标签,我们可以通过 audio 标签处理音频文件;audio 标签能够播放声音文件或者音频流,遗憾是当今主流浏览器任然没有完全兼容他...Audio 标签,无法播放此音频 在上面的其他例子我们只是使用一个 Ogg 音频文件格式,这种格式目前只兼容 Firefox、Opera 以及 Chrome 浏览器。...HTML5 Audio 标签属性 属性名 属性值 描述 autoplay autoplay 如果使用该属性,则音频文件加载就绪后马上播放 controls controls 如果使用该属性,则向用户显示一些控制控件...,比如:播放按钮、暂停按钮等 loop loop 如果使用该属性,则每当音频文件播放结束时,会重新开始重复播放 preload preload 如果使用该属性,则音频文件页面加载时进行加载,并预先准备播放

    2.1K30

    Android音频编辑之音频转换PCM与WAV

    Ogg Vorbis文件扩展名是.OGG。这种文件设计格式是非常先进。...现在创建OGG文件可以未来任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质改良,而不影响旧有的编码器或播放器。...WAV和PCM区别和联系 Android平台上要进行音频编辑操作(比如裁剪,插入,合成等),通常都是需要将音频文件解码为WAV格式音频文件或者PCM文件。...WAV文件采样率,声道数,采样位数,音频数据大小等信息,这样这个WAV就可以被音频播放器正确读取并播放,而单纯PCM文件因为只有编码音频数据,没有其他描述信息,所以无法被音频播放器识别播放。...音频文件解码 有了以上音频相关知识了解之后,现在可以来对android上常用音频文件进行解码和信息提取了。

    6K30

    FFmpeg开发笔记(三十八)APP如何访问SRS推流RTMP直播地址

    引入ExoPlayer播放RTMP直播流集成步骤说明如下。...一、修改build.gradle打开APP模块build.gradle,dependencies节点内部补充以下导包配置:implementation 'com.google.android.exoplayer...主包,还导入了rtmp扩展包。...二、修改播放代码支持RTMP流ExoPlayer详细用法参见《Android Studio开发实战:从零基础到App上线(第3版)》一书第14章“14.3.3  新型播放ExoPlayer”,其中与...三、调整SRS配置文件通过小程序或者ExoPlayer播放RTMP直播流时,可能出现播放界面黑屏,但有声音传出情况。这是因为SRS默认没有缓存关键帧,使得拉流一开始没找到关键帧就黑屏了。

    14910

    HTML5 标签audio添加网页背景音乐代码

    HTML5 Audio标签能够支持wav, mp3, ogg, acc, webm等格式,但有个很重要音乐文件格式midi(扩展名mid)却在各大浏览器中都没有内置支持(详见此处)。...不是所有的浏览器都支持MP3 OGG之类,每个浏览器因为版权问题支持格式都是不一样。  浏览器和音频兼容性 浏览器制造商并非都同意使用某种音频文件格式。...对于图像,PNG、JPEG 或 GIF 格式文件在任何浏览器上都能加载到您网页里。遗憾是,音频文件并非如此。表 1 展示了网页可以使用音频文件格式,但是并非所有格式都能用于所有浏览器。...支持 不支持 支持 不支持 没有一种通用文件格式让每个浏览器都使用单个文件格式意味着至少有 2/5 浏览器无法播放某些声音。...这不是无法单一音频标准达成一致浏览器制造商不妥协问题,而是涉及专利权和特许权使用费法律和财务问题。不受软件专利限制 OGG 格式旨在一劳永逸地解决这个问题。

    11.3K31

    Android主流播放器比较

    本篇文章主要介绍 Android 原生 VideoView,Google 开源视频播放框架 ExoPlayer,Vitamio 视频播放框架以及 Bilibili 开源视频播放框架 ijkplayer...VideoView 使用非常简单,播放视频步骤: 界面布局文件定义 VideoView 组件,或在程序创建 VideoView 组件 调用 VideoView 的如下两个方法来加载指定视频:...支持高级 HLS 特性,例如正确处理 EXT-X-DISCONTINUITY 标签; 支持自定义和扩展ExoPlayer 专门为此设计; 便于随着 App 升级而升级。...因为 ExoPlayer 是一个包含在你应用库,对于你使用哪个版本有完全控制权,并且你可以简单跟随应用升级而升级; 更少适配性问题。...2. Activity onCreate 方法添加如下代码,初始化 Vitamio 解码器 @Override public void onCreate(Bundle icicle) {

    2.9K20

    Ijkplayer、ExoPlayer、VLC播放器综合比较

    modules供开发者二次开发; 2.ijkplayer 官方维护力度小,版本更新很慢; ExoPlayer ExoPlayer 是google推出开源播放器,主要是集成了Android 提供一套解码系统来解析视频和音频...; 优点: 1.接入包小,1.1M; 2.维护团队强大,更新速度快; 缺点: 1.不太适合直播; 2.视频解码无法接入软解,可扩展性一般; 3.适合播放场景简单项目,播放过程无切换码流情况; --...-- ExoPlayer 会替代MediaPlayer成为Android平台上默认播放器吗?...目前还是一个小而轻播放器,如果要合成到系统,它需要调整东西太多,代码量会变得很繁杂,很可能得不偿失; 综合分析 对于Android 团队播放器选型这一块,我觉得根据情况选择ijkplayer或者...exoplayer; 如果你播放场景比较简单,播放视频源比较单一,例如短视频,建议选择exoplayer; 如果你播放场景比较复杂,有直播场景,特别是涉及到播放过程码流切换,还是选择ijkplayer

    8.3K20

    FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit直播链接问题

    即使不用VLC播放器,直接在Qt工程C++代码调用FFmpegAPI,也能访问ZLMediaKit直播地址,并正常渲染视频画面。...根据该书操作步骤,APP工程JNI代码调用FFmpegAPI,也能正常播放ZLMediaKit直播画面。...但是如果手机APP不走FFmpeg,通过其他途径访问直播地址之时,却发现无法播放ZLMediaKitHLS直播地址http://124.***.***.***:8080/live/test/hls.m3u8...无论采用谷歌官方ExoPlayer,还是采用微信小程序video标签,都播放不了ZLMediaKitHLS视频。...那么修改HttpFileManager.cpp里accessFile函数,把这里401鉴权代码注释掉,并将修改后代码文件上传到Linux服务器。

    19310

    音视频开发之旅(45)-ExoPlayer 音频播放器实践(一)

    设计音乐播放器APP架构时,有几种常用做法 方案一 注册Service,用于数据设置、音乐控制,Service自定义播放一些状态值和回调接口用于流程控制 通过广播、aidl等实现和页面层逻辑通信...APP媒体会话 方案二 Android5.0时推出MediaSession框架(Supprot包MediaSessionCompat也对低版本做了支持),专门用来解决媒体播放时界面和Service通信问题...也包含媒体播放器实例(比如我们本篇实践ExoPlayer) MediaSession 一般MediaBrowserServiceonCreate创建,通过MediaSession.CallBack...Activity直接和Service通过MediaSession框架各种回调进行通信,播放ExoPlayer封装在Service内,数据获取也Service。...这明显和真实场景有差异。 另外播放管理相关没有分离,播放队列维护,播放状态管理等等没有统一管理,不利于扩展扩展更换播放器等。

    5.2K00
    领券