Имеется код на стороне клиента:
try {
socket = new Socket(InetAddress.getByName(hostname), port);
pfd = ParcelFileDescriptor.fromSocket(socket);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
recorder.setOutputFile(pfd.getFileDescriptor());
// String filename = String.format("/sdcard/%d.mp4", System.currentTimeMillis());
//
// recorder.setOutputFile(filename);
try
{
recorder.prepare();
recorder.start();
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
и код собственно сервера:
try
{
System.out.println("create sock");
ServerSocket svsock = new ServerSocket(1935);
System.out.println("accept");
Socket sock = svsock.accept();
System.out.println("buffer read");
FileOutputStream outFile = null;
String filename = String.format("%d.mp4", System.currentTimeMillis());
try {
outFile = new FileOutputStream(filename);
System.out.println(filename);
} catch (IOException e1) {
e1.printStackTrace();
}
InputStream is = new DataInputStream(sock.getInputStream());
byte[] byteBuffer = new byte[1024];
int allsize = 0;
while(sock.isConnected()) {
int size = is.read(byteBuffer);
if (size == -1){
break;
} else {
outFile.write(byteBuffer, 0, size);
}
allsize += size;
}
System.out.println("close size=" + allsize);
outFile.close();
sock.close();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("endmain");
}
}
При запуске приложения на Android 2.2.2 (HTC quiet brilliant) все работает отлично. Я нажимаю кнопку открывается сокет на сервер, который записывает данные в файл. И файл этот затем успешно воспроизводится тем же VLC плеером.
Однако, когда я тестирую на Android 4.0.4 (Galaxy S2), сервер также создает файл и записывает в него данные, но при попытке воспроизвести файл VLC выдает ошибку
mp4 error: MP4 plugin discarded (no moov,foov,moof box) avcodec error: Could not open �codec demux error: Specified event object handle is invalid ps error: cannot peek main error: no suitable demux module for `file/:///C:/1345461283455.mp4'
Другие плееры также отказываются его воспроизводить. (пробовал даже загрузить на youtube, но он также выдал мне ошибку формата файла). при этом если я не записываю на сервер а записываю на sdcard телефона, то все отлично создается и проигрывается.
Тут может быть ошибка как на стороне сервера, так и какая-то новинка на API 15 (4.0.4). Может что-то надо добавить к getFileDescriptor() и т.д.
Помогите советом, пожалуйста, или по крайней мере не ставьте минус. Я долго и безуспешно гуглил, перед тем как накатать такой огромный вопрос :)