首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS和Android音频格式

iOS和Android音频格式
EN

Stack Overflow用户
提问于 2013-04-08 12:41:57
回答 7查看 21.7K关注 0票数 21

如果我问的问题太笼统,我很抱歉。

我们正在开发一个在移动设备上录制和播放音频的应用程序。这个应用程序正在为Android和iOS开发。应用程序将使用设备麦克风录制音频,并将其存储在服务器中。

用户(在安卓和iOS上)可以打开应用程序并播放存储在服务器上的声音。我们使用的声音格式是AAC。在iOS中,它工作得很好。我们可以录制和播放AAC文件。

但在安卓系统(三星S3和三星Galaxy Y)上,我们不能录制AAC格式的声音。但是在S3中我们可以播放AAC文件。

我的问题是,我们应该选择哪种格式的录制和播放安卓(应该支持从2.3到果冻)和iOS。我们应该使用MP4吗?

我们的一个解决方案是,在后台,我们可以将音频文件转换为AAC、MP4或3GP,并根据版本将支持的文件提供给手机。

EN

回答 7

Stack Overflow用户

发布于 2015-10-26 20:05:26

Android和iOS使用相同的服务器来存储记录。保存所有记录时不带任何扩展名。

Android从服务器下载一条记录时,我的应用程序会添加一个".aac“扩展。

当使用iOS时,它会添加一个".m4a“扩展。

相同的记录在两个移动平台上都表现良好。

iOS上的记录:

代码语言:javascript
运行
复制
NSDictionary recorderSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
                        [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
                        [NSNumber numberWithInt:16000],AVSampleRateKey,
                        [NSNumber numberWithInt:1],AVNumberOfChannelsKey,
                        [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,
                        [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
                        [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
                        nil];

适用于安卓的

代码语言:javascript
运行
复制
myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
myRecorder.setAudioSamplingRate(16000);
myRecorder.setAudioChannels(1);
mRecorder.setOutputFile(fileName);
票数 30
EN

Stack Overflow用户

发布于 2013-04-08 13:38:24

我们最近完成了一个应用程序与这种功能录制和收听从iOS和安卓,以下是我们使用的代码为您的reference.We依赖于我们的网络服务和服务器转换为.mp3格式,可以很容易地在这两个平台上播放。

代码语言:javascript
运行
复制
//iPhone side code. records m4a file format (small in size)

NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
                                [NSNumber numberWithFloat:16000.0], AVSampleRateKey,
                                [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                nil];
NSError *error = nil;
audioRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error];

if (error)
    NSLog(@"error: %@", [error localizedDescription]);
else
    [audioRecorder prepareToRecord];


//Android side code. (records mp4 format and it works straight away by giving mp3 extension.)
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioEncodingBitRate(256);
recorder.setAudioChannels(1);
recorder.setAudioSamplingRate(44100);
recorder.setOutputFile(getFilename());

try {
    recorder.prepare();
    recorder.start();
    myCount=new MyCount(thirtysec, onesecond);
    myCount.start();
    recordingDone=true;
    count=0;
    handler.sendEmptyMessage(0);
    if(progressDialog.isShowing())
        progressDialog.dismiss();
} catch (IllegalStateException e) {
    e.printStackTrace();
    StringWriter strTrace = new StringWriter();
    e.printStackTrace(new PrintWriter(strTrace));
    CrashReportActivity.appendLog(
                                  "\nEXCEPTION : \n" + strTrace.toString() + "\n",
                                  Comment.this);
} catch (IOException e) {
    e.printStackTrace();
    StringWriter strTrace = new StringWriter();
    e.printStackTrace(new PrintWriter(strTrace));
    CrashReportActivity.appendLog(
                                  "\nEXCEPTION : \n" + strTrace.toString() + "\n",
                                  Comment.this);
}

你可以很容易地在.Net中找到从m4a到mp3的转换代码,通过谷歌搜索(lame或faad之类的工具)。

希望这能有所帮助。

票数 13
EN

Stack Overflow用户

发布于 2015-07-23 12:41:25

我们最近遇到了这个互操作性问题。我们试图在两个平台上录制aac格式的文件,但使用三星手机录制的文件无法在iOS中播放。因此,为了在android和ios的多个设备上播放文件,我们必须同时使用3gp和aac格式。

以下是我们在Android中录制文件时使用的代码:

代码语言:javascript
运行
复制
    mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    mRecorder.setOutputFile(fileName);

我们将录制文件的扩展名保留为.3gp。

然而,在iOS中,录制不能在3gp中进行,因此我们在iOS中将文件录制到.aac中,该文件可以在两个平台上播放。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15871407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档