Можно также использовать BOOST_CHECK_EXCEPTION, который позволяет Вам определять тестовую функцию, которая проверяет Ваше исключение.
Это дикий выстрел в темноте, но я видел аналогичное поведение с флэш-плеером, когда он фактически игнорирует имя файла и полагается только на тип MIME, отправленный сервером. Есть идеи, какие заголовки отправляются с example.com ? Возможно, вы захотите попробовать обернуть свой blah.m4a на странице, которая может устанавливать заголовки, а затем передавать двоичные данные. Попробуйте эти типы, и сообщество будет признательно за подтверждение того, что работает:
audio / mpeg аудио / mp4a аудио / mp4a-latm аудио / aac audio / x-aac
Этот обходной путь позволяет воспроизводить файлы M4A из сети (и файлы AAC в других контейнерах, таких как MP4 и 3GP). Он просто загружает файл и воспроизводит его из кеша.
private File mediaFile;
private void playAudio(String mediaUrl) {
try {
URLConnection cn = new URL(mediaUrl).openConnection();
InputStream is = cn.getInputStream();
// create file to store audio
mediaFile = new File(this.getCacheDir(),"mediafile");
FileOutputStream fos = new FileOutputStream(mediaFile);
byte buf[] = new byte[16 * 1024];
Log.i("FileOutputStream", "Download");
// write to file until complete
do {
int numread = is.read(buf);
if (numread <= 0)
break;
fos.write(buf, 0, numread);
} while (true);
fos.flush();
fos.close();
Log.i("FileOutputStream", "Saved");
MediaPlayer mp = new MediaPlayer();
// create listener to tidy up after playback complete
MediaPlayer.OnCompletionListener listener = new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
// free up media player
mp.release();
Log.i("MediaPlayer.OnCompletionListener", "MediaPlayer Released");
}
};
mp.setOnCompletionListener(listener);
FileInputStream fis = new FileInputStream(mediaFile);
// set mediaplayer data source to file descriptor of input stream
mp.setDataSource(fis.getFD());
mp.prepare();
Log.i("MediaPlayer", "Start Player");
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
}
try --
1) MP.prepareAsync()
2) onPrepared() { mp.start() }
Я написал небольшой блог об облачном решении, которое я использую для разрабатываемого мной музыкального плеера. Он основан на молодом проекте Android Cloud Services (ACS), который пока недоступен, но тем не менее показывает потенциальное решение с использованием облачного транскодирования для потоковой передачи любых медиафайлов. Посмотрите: http://positivelydisruptive.blogspot.com/2010/08/streaming-m4a-files-using-android-cloud.html
Джоэл