MediaRecorder - не удалось изменить тип вывода на дескриптор файла - PullRequest
0 голосов
/ 12 февраля 2020

Моя цель - создать потоковое приложение. Я хочу транслировать экран устройства в веб-приложении, написанном на 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.

...