Я занимаюсь разработкой приложения, которое имеет функцию совместного использования экрана с другим приложением.
Для этого я использовал API-интерфейс проекции мультимедиа.Я использовал MediaMuxer для объединения аудио и видео для совместного использования экрана.
Я знаю, что API-интерфейсы Media Projection используются для записи на экран, но все, что я хочу использовать для доступа к экрану во время записи.
Для этого,Я изменил writeSampleData класса MediaMuxer для отправки байтов через сокет на другое устройство по сети.
Ниже приведен код для этого:
OutputStream outStream;
outStream = ScreenRecordingActivity.getInstance (). Socket.getOutputStream ();
void writeSampleData(final int trackIndex, final ByteBuffer byteBuf, final MediaCodec.BufferInfo bufferInfo) {
if (mStatredCount > 0) {
mMediaMuxer.writeSampleData(trackIndex, byteBuf, bufferInfo);
if (bufferInfo.size != 0) {
byteBuf.position(bufferInfo.offset);
byteBuf.limit(bufferInfo.offset + bufferInfo.size);
if (outStream != null) {
try {
byte[] bytes = new byte[byteBuf.remaining()];
byteBuf.get(bytes);
//Send the data
outStream.write(bytes);
outStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Байты успешно переданы через сокет, и я также могу получать эти байты на стороне получателя.
Ниже приведен код для получения байтов на стороне получателя:
private class SocketThread implements Runnable {
@Override
public void run() {
Socket socket;
try {
serverSocket = new ServerSocket(SERVER_PORT);
} catch (IOException e) {
e.printStackTrace();
}
if (null != serverSocket) {
while (!Thread.currentThread().isInterrupted()) {
try {
socket = serverSocket.accept();
CommunicationThread commThread = new CommunicationThread(socket);
new Thread(commThread).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class CommunicationThread implements Runnable {
InputStream in;
DataInputStream dis;
public CommunicationThread(Socket clientSocket) {
updateMessage("Server Started...");
}
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
byte[] data = new byte[512];
} catch (Exception e) {
e.printStackTrace();
try {
fos.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
}
}
Я перешел по следующим ссылкам для совместного использования экрана:
Снимок экрана
screenrecorder
Запись экрана с помощью mediaProjection
Я использовал код из приведенных выше примеров и создаю приложение.
Все, что я хочу знать, - это как обрабатывать байты на стороне получателя,Как отформатировать эти байты для воспроизведения потоковой передачи в реальном времени со стороны отправителя.
Соблюдаю ли я правильный подход к отправке и получению байтовых данных?
Позволяет ли MediaProjection осуществлять потоковую передачу экрана во время записи между приложениями?
Любая помощь будет высоко оценена.