Я пытаюсь написать приложение, которое записывает видео на одно устройство и отправляет его на другое устройство через WiFi-Direct.
Теперь у меня уже есть проблема с записью видео с помощью MediaRecorder.Я создаю свое приложение после следующего примера кода https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java при установке файла в качестве выходного файла для MediaRecorder, работают mediaRecorder.prepare () и mediarecorder.start (), но когда я вызываю метод mediaRecorder.stop ()мое приложение вылетает.Я получаю ошибку что-то вроде «mediaRecorder stop () fail -1007» в консоли.Я проверил предложенные решения из этого вопроса Не удалось завершить останов Android mediarecorder , но это не помогло решить мою проблему.Я также попробовал некоторый пример кода, который я нашел, чтобы напрямую использовать ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(skt)
и mMediaRecorder.setOutputFile(pfd.getFileDescriptor());
, чтобы не было необходимости сохранять видео и воспроизводить его с MediaPlayer на другом устройстве, но затем mediaRecorder.prepare () уже дает исключение
спасибо за любую возможную помощь, которую я получу
* edit
после сохранения видео, возникла следующая проблема: перенести его.Устройства подключены через Wifidirect и есть общий сокет.Я хочу отправить видео по следующему адресу:
public void sendFile(String filepath) {
int len;
byte buf[] = new byte[1024];
try {
OutputStream out = socket.getOutputStream();
File file = new File(filepath);
FileInputStream is = new FileInputStream(file);
while ((len = is.read(buf)) != -1) {
out.write(buf, 0, len);
}
out.close();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
На отправляющей стороне нет никаких исключений, но как я могу узнать, действительно ли были отправлены данные всего файла?На принимающей стороне я попробовал следующее: `открытый класс SendReceive extends Thread {
private InputStream inputStream;
private OutputStream outputStream;
public SendReceive(Socket skt) {
socket = skt;
try {
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
byte[] bytes = new byte[16 * 1024];
String path = null;
try {
while (inputStream.read(bytes) != -1) {
String filename = (getFilesDir() + "/")
+ System.currentTimeMillis() + ".mp4";
int count;
byte[] buffer = new byte[8192]; // or 4096, or more
OutputStream out = null;
BufferedOutputStream bos= null;
try {
File video = new File(filename);
File dirs = new File(video.getParent());
if (!dirs.exists())
dirs.mkdirs();
video.createNewFile();
path = video.getAbsolutePath();
out = new FileOutputStream(video);
bos = new BufferedOutputStream(out);
} catch (FileNotFoundException ex) {
System.out.println("File not found. ");
}
copyFile(inputStream,bos);
out.flush();
out.close();
// showVideo(filename);
byte[] namearray = path.getBytes();
handler.obtainMessage(MESSAGE_READ, counter, -1, namearray).sendToTarget();
}
} catch (IOException e) {
e.printStackTrace();
}
}
.,.
public static boolean copyFile(InputStream inputStream, OutputStream out) {
byte buf[] = new byte[1024];
int len;
try {
while ((len = inputStream.read(buf)) != -1) {
out.write(buf, 0, len);
}
out.flush();
inputStream.close();
} catch (IOException e) {
return false;
}
return true;
}
При этом, в этом месте не создается файл, но я получаю байты из входного потока.Я просто хочу сохранить видео, отправленное с одного устройства на другое, и после воспроизведения с помощью MediaPlayer
greetings