如果我问的问题太笼统,我很抱歉。
我们正在开发一个在移动设备上录制和播放音频的应用程序。这个应用程序正在为Android和iOS开发。应用程序将使用设备麦克风录制音频,并将其存储在服务器中。
用户(在安卓和iOS上)可以打开应用程序并播放存储在服务器上的声音。我们使用的声音格式是AAC。在iOS中,它工作得很好。我们可以录制和播放AAC文件。
但在安卓系统(三星S3和三星Galaxy Y)上,我们不能录制AAC格式的声音。但是在S3中我们可以播放AAC文件。
我的问题是,我们应该选择哪种格式的录制和播放安卓(应该支持从2.3到果冻)和iOS。我们应该使用MP4吗?
我们的一个解决方案是,在后台,我们可以将音频文件转换为AAC、MP4或3GP,并根据版本将支持的文件提供给手机。
发布于 2015-10-26 20:05:26
Android和iOS使用相同的服务器来存储记录。保存所有记录时不带任何扩展名。
当Android从服务器下载一条记录时,我的应用程序会添加一个".aac“扩展。
当使用iOS时,它会添加一个".m4a“扩展。
相同的记录在两个移动平台上都表现良好。
iOS上的记录:
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];
适用于安卓的:
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);
发布于 2013-04-08 13:38:24
我们最近完成了一个应用程序与这种功能录制和收听从iOS和安卓,以下是我们使用的代码为您的reference.We依赖于我们的网络服务和服务器转换为.mp3格式,可以很容易地在这两个平台上播放。
//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之类的工具)。
希望这能有所帮助。
发布于 2015-07-23 12:41:25
我们最近遇到了这个互操作性问题。我们试图在两个平台上录制aac格式的文件,但使用三星手机录制的文件无法在iOS中播放。因此,为了在android和ios的多个设备上播放文件,我们必须同时使用3gp和aac格式。
以下是我们在Android中录制文件时使用的代码:
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中,该文件可以在两个平台上播放。
https://stackoverflow.com/questions/15871407
复制相似问题