Я использую следить за уроками
- MediaCodec и MediaProjection для захвата экрана
- DatagramSocket для отправки данных ByteArray
Хочу задать несколько вопросов
- Как сделать эффект более плавным и ясно
- Если у меня есть другие варианты достижения функции, которую я например, хочу ли я использовать какую-нибудь библиотеку с открытым исходным кодом или какие-либо другие решения?
Я уже написал два клиента
отправки данных
fun sendCaptureData(data: ByteArray) {
if (tvInfo == null) {
Logger.e("TV info is null")
return
}
job.launch {
try {
val chunks = splitCaptureData(data)
for (chunk in chunks) {
val datagramPacket = datagramPacketPool.borrow()
datagramPacket.data = chunk
datagramPacket.length = chunk.size
datagramPacket.address = InetAddress.getByName(tvInfo!!.ip)
datagramPacket.port = tvInfo!!.port
datagramSocket.send(datagramPacket)
datagramPacketPool.release(datagramPacket)
}
} catch (e: Exception) {
Logger.e(e, "Error sending data")
}
}
}
получить данные
fun startReceiving(dataDecoder: DataDecoder) {
isReceiving = true
// 启动接收协程
job.launch {
while (isReceiving) {
try {
datagramSocket.receive(packet)
val receivedData = ByteArray(packet.length)
System.arraycopy(packet.data, packet.offset, receivedData, 0, packet.length)
dataDecoder.decode(receivedData)
} catch (e: Exception) {
Logger.e(e, "Error receiving data")
}
}
}
}
декодировать данные
fun decode(receivedData: ByteArray) {
if (mediaCodec == null) return
val index = mediaCodec!!.dequeueInputBuffer(10000)
if (index >= 0) {
val inputBuffer = mediaCodec!!.getInputBuffer(index)
inputBuffer?.clear()
inputBuffer?.put(receivedData, 0, receivedData.size)
mediaCodec!!.queueInputBuffer(index, 0, receivedData.size, 0, 0)
val bufferInfo = MediaCodec.BufferInfo()
var outputBufferIndex = mediaCodec!!.dequeueOutputBuffer(bufferInfo, 0)
while (outputBufferIndex >= 0) {
mediaCodec!!.releaseOutputBuffer(outputBufferIndex, true)
outputBufferIndex = mediaCodec!!.dequeueOutputBuffer(bufferInfo, 0)
}
Logger.i("MediaCodec decoded")
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -wifi-only