【发布时间】:2010-12-30 03:54:35
【问题描述】:
我正在为 android 编写 java 代码。问题是如何事先获取 mp3 文件大小及其音频长度,以便我可以设置进度条/搜索条。响应搜索事件。
答案可以是头文件或算法中的简单信息。
我正在使用 androids mediaplayer 进行流式传输,唯一的问题是寻求这两个都需要上述内容。
感谢任何帮助。
我还尝试使用此菜鸟代码手动查看 mp3 文件并获取标题以解码 mp3 长度。
total = ucon.getContentLength(); //ucon is an HTTPURLconnection
is= ucon.getInputStream();
byte[] buffer = new byte[1024];
is.read(buffer , 0, 1024);
int offset = 1024;
int loc = 2000;
//FrameLengthInBytes = 144 * BitRate / SampleRate + Padding
while(loc == 2000 && offset< total)
{
for(int i = 0 ; i <1024 ;i++ )
{
if((int)buffer[i] == 255)
{
if((int)buffer[i+1] >= 224)
{
loc = i+1;
break;
}
}
}
is.read(buffer , 0, 1024);
offset = 1024 + offset;
}
找不到标记 mp3 标头的模式 (11111111 111xxxxx)。尝试了不同的文件。找不到其他事情可做。
更新 2:
现在我知道我不必搜索 mp3 标头而是 ID3v2 标头。但是在流式传输文件和在 Android 上仍然完成。我真的希望有人能提供帮助,并且有很多程序在做这些事情,我想知道为什么我必须这样做。
【问题讨论】:
-
您使用的是什么 MP3 库?向我们展示您的代码并描述您遇到的问题。
-
你从哪里流式传输?互联网还是文件?
-
我在 Android 设备上使用 mediaplayer() 流式传输 mp3,并将其与 mediacontroller ("developer.android.com/reference/android/widget/…) 连接。问题是 mediacontroller() 无法设置 mp3 歌曲长度。它给出了以下错误:未发送缓冲状态,因为持续时间未知。仍然一无所获。
-
groups.google.com/group/android-developers/browse_thread/thread/… 这与我面临的错误相同。如果你们建议我尝试重写 mediacontroller 或 mediaplayer 类,但我只是一个新开发人员,需要大量帮助。
-
听起来如果不下载整个文件就无法获得音频长度stackoverflow.com/questions/624741/…
标签: java android streaming mp3