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

ExoPlayer有时会从url返回mp3文件的负值持续时间

ExoPlayer 是一个开源的、可扩展的 Android 平台媒体播放器,它支持广泛的音频和视频格式。当你遇到 ExoPlayer 从 URL 返回 MP3 文件的负值持续时间时,这通常意味着播放器在解析媒体文件时遇到了问题。

基础概念

MP3 文件的持续时间信息通常存储在文件的元数据中。ExoPlayer 使用这些元数据来确定文件的播放时长。如果这个信息不正确或损坏,播放器可能会读取到一个负值或不正确的持续时间。

可能的原因

  1. 元数据损坏:MP3 文件的元数据可能由于多种原因(如传输错误、存储问题等)而损坏。
  2. 服务器配置问题:如果 MP3 文件是从服务器上流式传输的,服务器的配置可能会影响文件的元数据。
  3. 不兼容的编码:某些 MP3 编码可能不被 ExoPlayer 完全支持,导致解析错误。

解决方法

  1. 检查文件完整性: 确保 MP3 文件没有损坏。你可以使用音频编辑软件或在线工具来检查和修复文件。
  2. 验证服务器配置: 确保服务器正确配置以提供完整的 MP3 文件和元数据。检查服务器的 MIME 类型设置,确保它正确地标识了 MP3 文件。
  3. 更新 ExoPlayer: 确保你使用的是最新版本的 ExoPlayer,因为新版本可能修复了旧版本中的解析错误。
  4. 使用其他播放器测试: 尝试使用其他媒体播放器(如 VLC 或 Windows Media Player)来播放该 MP3 文件,以确定问题是否特定于 ExoPlayer。
  5. 手动设置持续时间: 如果上述方法都无法解决问题,你可以尝试手动设置 MP3 文件的持续时间。这可以通过 ExoPlayer 的 MediaSourceMediaPeriod 类来实现。

示例代码

以下是一个简单的示例,展示如何在 ExoPlayer 中手动设置 MP3 文件的持续时间:

代码语言:txt
复制
// 创建一个 MediaSource
MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(uri);

// 获取播放器实例
SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build();

// 准备播放器
player.prepare(mediaSource);

// 手动设置持续时间(假设你知道正确的持续时间)
long durationMs = 123456; // 替换为正确的持续时间(以毫秒为单位)
player.setDuration(durationMs);

// 开始播放
player.play();

参考链接

通过上述方法,你应该能够解决 ExoPlayer 返回 MP3 文件负值持续时间的问题。如果问题仍然存在,建议查看 ExoPlayer 的官方论坛或社区,以获取更多帮助和支持。

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

相关·内容

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

,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。...MPEG Layer 1/2, MP3 - MPEG Layer 3, AAC - MPEG-4 part3, Vorbis, AC3 - A/52, E-AC-3, MLP / TrueHD>3, DTS...Input Formats MPEG (ES,PS,TS,PVA,MP3), AVI, ASF / WMV / WMA, MP4 / MOV / 3GP, OGG / OGM / Annodex, Matroska...ExoPlayer ExoPlayer 是google推出开源播放器,主要是集成了Android 提供一套解码系统来解析视频和音频,将MediaCodec封装地非常完善,形成了一个性能优越,播放稳定性较好一个开发播放器...; VLC对点播支持比较好,但是工程庞大,接入或二次开发难度比较大; SmartPlayer对RTSP和RTMP直播播放支持非常优秀,毫秒级延迟,稳定性比较好; ExoPlayer不太适合直播,视频解码无法接入软解

7.9K70
  • ExoPlayer播放音视频使用介绍

    它展示了如何使用ExoPlayer播放DASH,SmoothStreaming和HLS自适应流,以及MP4、M4A、FMP4、WebM、MKV、MP3、Ogg、WAV、MPEG-TS、MPEG-PS、FLV...例如,默认MediaSource实现需要通过构造函数注入一个或多个DataSource工厂。通过提供自定义工厂,可以非标准源或通过不同网络栈加载数据。...(1)将ExoPlayer添加为依赖项 入门第一步是确保您项目根目录中build.gradle文件中包含JCenter和Google存储库。...这些方法返回SimpleExoPlayer,它扩展了ExoPlayer,添加了额外高级播放器功能。 下面的代码是创建SimpleExoPlayer示例。...(1)侧面加载字幕文件 给定一个视频文件和一个单独字幕文件,可以使用 MergingMediaSource 将它们合并到单个播放源中。

    6.3K20

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

    ​《FFmpeg开发实战:零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议推拉流。...注意,使用ffmpeg命令把视频文件推流给SRS时,要注意区分FFmpeg版本,因为FFmpeg6.1开始才给RTMP协议支持HEVC、VP9、AV1这三种视频编码器,所以FFmpeg 6.0和更早版本只能以...二、修改播放代码支持RTMP流ExoPlayer详细用法参见《Android Studio开发实战:零基础到App上线(第3版)》一书第14章“14.3.3  新型播放器ExoPlayer”,其中与...三、调整SRS配置文件通过小程序或者ExoPlayer播放RTMP直播流时,可能出现播放界面黑屏,但有声音传出情况。这是因为SRS默认没有缓存关键帧,使得拉流一开始没找到关键帧就黑屏了。...更多详细FFmpeg开发知识参见《FFmpeg开发实战:零基础到短视频上线》。​

    13510

    Android ExoPlayer 音画同步代码分析

    ExoPlayer 中 com.google.android.exoplayer2.audio.BaseRenderer#getMediaClock 方法是空实现,但是在子类中视频依然返回 null...,在ExoPlayer中,自定义MediaClock基本上很难外部传入,那么,如果想在外部传入自定义MediaClock怎么实现呢 ?...如果 earlyUs 时间差为正值,代表视频帧应该在当前系统时间之后被显示,换言之,代表视频帧来早了,反之,如果时间差为负值,代表视频帧应该在当前系统时间之前被显示,换言之,代表视频帧来晚了。...在有些业务中音频输出和ExoPlayer是分开,我们要考虑如何通过音频播放器去同步ExoPlayer视频渲染器,但有ExoPlayer具备高度可扩展性,我们可以通过自定时钟方式去同步ExoPlayer...返回值大于0后放弃调用此方法,否则延迟(Latecy)可能导致新不同步问题。

    1.3K20

    01.视频播放器框架介绍

    但是存在一些问题,比如如下所示 文件缓存超过限制后没有按照lru算法删除, 处理返回给播放器http响应头消息,响应头消息获取处理改为head请求(需服务器支持) 替换网络库为okHttp(因为大部分项目都是以...传入视频url链接,返回一个代理链接,然后就可以呢HttpProxyCacheServer cacheServer = ProxyVideoCacheManager.getProxy(this); String...原理详细一点来说 1.采用了本地代理服务方式,通过原始url给播放器返回一个本地代理一个url ,代理URL类似:http://127.0.0.1:port/视频url;(port端口为系统随机分配有效端口...4.根据url检查视频文件是否存在,读取文件数据给播放器,也就是往socket里写入数据(socket通信)。同时如果没有下载完成会进行断点下载,当然弱网的话数据需要生产消费同步处理。...如何实现预加载 其实预加载思路很简单,在进行一个播放视频后,再返回接下来需要预加载视频url,启用线程去请求下载数据 开启一个线程去请求并预加载一部分数据,可能需要预加载数据大于>1,利用队列先进入先进行加载

    2.7K51

    Python爬虫有用库:pydub,处理音视频

    ("文件路径.aiff", "aac") 第二种方法: mp3_audio = AudioSegment.from_file("文件路径.mp3", format="mp3") # 还可以更精确读取...==ffmpeg支持文件参考==:http://www.ffmpeg.org/general.html#File-Formats 2、保存文件 song.export("文件路径.mp3", format...获取帧速率 frames_per_second = sound.frame_rate # 获取采样率 bytes_per_frame = sound.frame_width # 获取帧数,这个例子是返回...= AudioSegment.silent(duration=1000) ⑧、创建一个持续时间为0AudioSegment对象 empty = AudioSegment.empty() 可以用于将许多音频集合在一起循环...# 存放三个音频文件 sounds = [song_1, song_2, song_3] # 创建一个持续时间为0对象 empty = AudioSegment.empty() for sound

    1.6K10

    Android 技能树 — 最全AndroidVideoCache解析

    proxy = getProxy(); String proxyUrl = proxy.getProxyUrl(url); //'把代理url给你代码使用:' //比如给exoplayer使用 MediaSource...touchFileSafely(cacheFile); //'把本地文件url返回给上层使用' return Uri.fromFile(cacheFile...字面意思是网络代理缓存类,后续继续细看' private volatile HttpProxyCache proxyCache; //'看到了一系列监听器,字面意思就知道是缓存监听器...; //'下载完成后,把文件后缀名.download改为真正文件后缀名,比如mp3' //'(这个后缀名是根据传入url里面拿,一般比如http://xxxxxxxx.mp3...,就拿到了mp3后缀)' void complete() throws ProxyCacheException; //'判断是否是临时文件,根据文件后缀名是不是.download判断'

    2.1K22

    语音深度鉴伪识别项目实战:基于深度学习语音深度鉴伪识别算法模型(一)音频数据编码与预处理

    智能手机语音助手到智能家居中语音控制系统,再到银行和电信行业语音身份验证,语音技术应用日益广泛。...人耳能够听到频率范围通常在20 Hz到20 kHz之间。持续时间(Duration)持续时间是指音频信号总时长,通常以秒(s)为单位。持续时间决定了音频文件长度。...较长持续时间会产生更大数据量。单声道和立体声(Channels)单声道(Mono):单声道音频只有一个声道,所有的声音都来自一个方向,音频文件较小,常用于电话通信和某些广播应用。...查看一个WAV文件数据特征,可以通过读取文件元数据和音频数据,了解其采样率、声道数、采样位宽、持续时间等信息。可以使用Pythonwave库和librosa库来读取WAV文件,并查看其数据特征。...('sine_wave.wav')# 保存为 MP3 文件audio.export('sine_wave.mp3', format='mp3', bitrate='192k')print("WAV file

    31873

    Android平台播放RTSP流几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

    你可以将VLC集成到你Android应用中,或者简单地将RTSP流URL作为Intent发送到VLC应用进行播放。...完全免费 - 无间谍软件,无广告,无跟踪用户行为集成VLC到Android项目中:将VLC集成到Android平台,主要涉及VLC官方仓库获取源代码、配置Android开发环境、构建项目、部署到Android...以下是一个详细集成流程:1. 获取VLC源代码VLC官方Git仓库中获取源代码。...在打开对话框中,导航到你所克隆VLC仓库,并选择vlc-android文件夹作为项目目录。等待Android Studio加载项目。...你可以将FFmpeg与ExoPlayer结合使用,通过FFmpeg来解码RTSP流,并将解码后数据传递给ExoPlayer进行播放。

    24210

    13 个适合『中级开发者』练手项目

    各个站点抓取内容需要进行保存。因此,需要使用数据库。...使用 Python 标准 relibrary,就可以对输入文本运行查询字符串。当查询字符串不匹配时,re 库将返回 None,当匹配时,将返回匹配字符串。...还可以使用其他模块,但这完全取决于你选择使用数据库。 2、额外挑战 用户忘记自己想法是人之常情,甚至有时会忘记自己记了笔记。你可以添加一个功能,提醒用户他们记了笔记。...GUI 项目设计 6、MP3 播放器 1、技术细节 该项目的主要目标是允许用户播放 MP3 和数字音频文件。为了吸引用户,应用程序必须具有简单但美观用户界面。...可以添加一个能列出可用 MP3 文件界面。还可以为用户列出其他非 MP3 数字音频文件。 用户还希望 MP3 播放器具有显示正在播放文件信息界面。

    1.5K40

    ffmpeg针对音视频常规命令整理

    适用平台:Linux、Windows、Mac OS X等 常规命令说明 -i——设置输入文件 -f——设置输出格式 -y——若输出文件已存在时则覆盖文件 -fs——超过指定文件大小时则结束转换 -t—...—指定输出文件持续时间,以秒为单位 -ss——指定时间开始转换,以秒为单位 -title——设置标题 -timestamp——设置时间戳 -vsync——增减Frame使影音同步 -vn——不处理影像...,于仅针对声音做处理时使用 -vcodec( -c:v )——设置影像影像编解码器,未设置时则使用与输入文件相同之编解码器 -b:a——设置每Channel(最近SVN版为所有Channel总合)流量...-c——指定输出文件编码 -metadata——更改输出文件元数据 -b:v——设置影像流量,默认为200Kbit/秒。.../test_new.mp3 -y # xx.amr格式转换mp3 (此命令未运行过,仅供参考) ffmpeg -i xx.amr -ab 16k -ar 16000 -ac 1 -f mp3 a.mp3

    2.1K192

    【Android FFMPEG 开发】Android 中使用 FFMPEG 对 MP3 文件进行混音操作

    输入文件3 -filter_complex amix=inputs=输入文件个数:duration=混音时间对齐策略:dropout_transition=声音渐弱时间 输出文件 -i : 输入文件完整绝对路径...; amix=inputs=2 : 表示混音文件个数 , 有 2 个文件进行混音 ;duration=longest : 设置混音时间对齐策略 , longest 表示最长音频文件持续时间 , shortest...表示最短输入持续时间 , first 表示第一个文件持续时间 ; dropout_transition=2 : 表示输入流结束时 , 音量满音量到 0 音量渐弱 2 秒消失 ; Android...=2 表示输入流结束时 , 音量满音量到 0 音量渐弱 2 秒消失 ; 最后混音输出文件是 /data/user/0/com.example.ffmpeg_mix/files/Mix.mp3 ;...: ffmpeg 是可执行文件 , Mix.mp3 是由其余两个 mp3 文件混音而来 ; 四、博客源码 ---- 博客源码 : GitHub : https://github.com/han1202012

    1.2K20

    FFmpeg开发笔记(五十二)移动端国产视频播放器GSYVideoPlayer

    二、修改App工程配置首先打开App项目的settings.gradle,在repositories节点内部补充下面两行仓库配置,以便指定仓库拉取GSYVideoPlayer库。...maven { url 'https://jitpack.io' }maven { url "https://maven.aliyun.com/repository/public" }接着打开App模块...以NormalGSYVideoPlayer为例,通过Java播放单个视频文件代码例子如下:private static String URL_MP4 = "https://video.zohi.tv/...IJKPlayer、EXOPlayer和AliPlayer,默认就支持HLS、RTMP等直播链接,所以无需改动代码,只要把视频地址换成以m3u8结尾HLS链接,或者以rtmp开头RTMP链接,即可让...利用NormalGSYVideoPlayer播放直播视频效果图如下所示:更多详细FFmpeg开发知识参见《FFmpeg开发实战:零基础到短视频上线》一书。​

    15810

    【Python】13 个适合『中级开发者』练手项目

    各个站点抓取内容需要进行保存。因此,需要使用数据库。...使用 Python 标准 relibrary,就可以对输入文本运行查询字符串。当查询字符串不匹配时,re 库将返回 None,当匹配时,将返回匹配字符串。...还可以使用其他模块,但这完全取决于你选择使用数据库。 2、额外挑战 用户忘记自己想法是人之常情,甚至有时会忘记自己记了笔记。你可以添加一个功能,提醒用户他们记了笔记。...GUI 项目设计 6、MP3 播放器 1、技术细节 该项目的主要目标是允许用户播放 MP3 和数字音频文件。为了吸引用户,应用程序必须具有简单但美观用户界面。...可以添加一个能列出可用 MP3 文件界面。还可以为用户列出其他非 MP3 数字音频文件。 用户还希望 MP3 播放器具有显示正在播放文件信息界面。

    1.3K20

    给中级Python开发者13个练手项目,适合你不?

    各个站点抓取内容需要进行保存。因此,需要使用数据库。 2....使用 Python 标准 relibrary,就可以对输入文本运行查询字符串。当查询字符串不匹配时,re 库将返回 None,当匹配时,将返回匹配字符串。...还可以使用其他模块,但这完全取决于你选择使用数据库。 2. 额外挑战 用户忘记自己想法是人之常情,甚至有时会忘记自己记了笔记。你可以添加一个功能,提醒用户他们记了笔记。...技术细节 该项目的主要目标是允许用户播放 MP3 和数字音频文件。为了吸引用户,应用程序必须具有简单但美观用户界面。 可以添加一个能列出可用 MP3 文件界面。...还可以为用户列出其他非 MP3 数字音频文件。 用户还希望 MP3 播放器具有显示正在播放文件信息界面。其中可以包括文件名、长度、播放时长以及未播放时长(以分钟和秒为单位)。

    1.2K40

    给中级Python开发者13个练手项目,适合你不?

    各个站点抓取内容需要进行保存。因此,需要使用数据库。 2....使用 Python 标准 relibrary,就可以对输入文本运行查询字符串。当查询字符串不匹配时,re 库将返回 None,当匹配时,将返回匹配字符串。...还可以使用其他模块,但这完全取决于你选择使用数据库。 2. 额外挑战 用户忘记自己想法是人之常情,甚至有时会忘记自己记了笔记。你可以添加一个功能,提醒用户他们记了笔记。...技术细节 该项目的主要目标是允许用户播放 MP3 和数字音频文件。为了吸引用户,应用程序必须具有简单但美观用户界面。 可以添加一个能列出可用 MP3 文件界面。...还可以为用户列出其他非 MP3 数字音频文件。 用户还希望 MP3 播放器具有显示正在播放文件信息界面。其中可以包括文件名、长度、播放时长以及未播放时长(以分钟和秒为单位)。

    1.1K20
    领券