Почему выходной файл MediaRecorder обрезается - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть очень простое действие для записи аудио с использованием MediaRecorder . Основные функции запуска / остановки

// start
recorder.prepare();
recorder.start();

// stop
recorder.stop();
recorder.release();
recorder = null;

Я передаю выходной файл в Google App Engine через org.apache.http.client.methods.HttpPost в хранилище данных BLOB-объектов.

// AsyncTask doInBackground
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(DEV_SERVER);
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
MultipartEntity reqEntity = new MultipartEntity(
    HttpMultipartMode.BROWSER_COMPATIBLE);
ContentResolver cr = getContentResolver();

InputStream audio_is = cr.openInputStream(working_uri);
int nRead;
byte[] data = new byte[16384];
while ((nRead = audio_is.read(data, 0, data.length)) != -1) {
    outstream.write(data, 0, nRead);
}
outstream.flush();
ByteArrayBody body = new ByteArrayBody(outstream.toByteArray(),
    POST_TEMP_FILENAME);
reqEntity.addPart("uploaded", body);
httppost.setEntity(reqEntity);
httpclient.execute(httppost);

В результате получается полный файл на SD-карте, но когда файл хранится на сервере, он поврежден.

Возможно, я неправильно читаю байты? Или дело в том, что Google App Engine неправильно хранит BLOB-объекты?

Вот код получения Python:

def post(self):
    entry = models.Entry()
    entry.content = db.Blob(self.request.get("uploaded"))
    entry.put();

1 Ответ

0 голосов
/ 25 февраля 2012

Оказывается, все работало просто отлично.Это был мой настольный плеер VLC, который не декодировал файл правильно.Аудио AMR / 3GP ужасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...