Моя цель - создать потоковое приложение. Я хочу транслировать экран устройства в веб-приложении, написанном на Angular. Ранее я создал функциональность с помощью MediaRecorder, которая записывает экран и сохраняет данные в файл. Из того, что я прочитал и исследовал, я обнаружил, что для потоковой передачи экрана я могу использовать LocalSocket вместо File с MediaRecorder и передать FileDescriptor в методе setFileOutput MediaRecorder.
Когда я его реализую, он дает следующее исключение :
W / pplication12345: аудит type = 1400 (0.0: 19217): av c: отказано в {чтение записи} для пути = "сокет: [1725434]" dev = "sockfs" ino = 1725434 scontext = u: r: медиа-сервер: s0 tcontext = u: r: untrusted_app: s0: c25, c257, c512, c768 tclass = unix_stream_socket permissive = 0
E / MediaRecorder: подготовка не удалась: -38
W / System.err: java .lang.IllegalStateException
Ниже приведен фрагмент кода:
LocalServerSocket server;
LocalSocket receiver;
Int BUFFER_SIZE = 500000;
LocalSocket sender;
server = new LocalServerSocket(“NET.STREAMING-”);
receiver = new LocalSocket();
receiver.connect(server.getLocalSocketAddress());
receiver.setReceiveBufferSize(BUFFER_SIZE);
sender = server.accept();
sender.setSendBufferSize(BUFFER_SIZE);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //THREE_GPP
mMediaRecorder.setOutputFile(sender.getFileDescriptor());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
mMediaRecorder.setVideoEncodingBitRate(512 * 1000);
mMediaRecorder.setVideoFrameRate(16); // 30
mMediaRecorder.setVideoEncodingBitRate(3000000);
Int rotation = getWindowManager().getDefaultDisplay().getRotation();
int orientation = ORIENTATIONS.get(rotation + 90);
mMediaRecorder.prepare();
Я использую последний API 29.