From 32a828aead5885e59382938eeaace828ef26237b Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Thu, 13 Nov 2025 15:12:42 +0800 Subject: [PATCH] =?UTF-8?q?[+]=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../media/video/ShareVideoCapturer.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/video/ShareVideoCapturer.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/video/ShareVideoCapturer.java index 0047312..a623634 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/video/ShareVideoCapturer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/video/ShareVideoCapturer.java @@ -13,10 +13,9 @@ import org.webrtc.VideoSink; import org.webrtc.VideoTrack; import java.nio.ByteBuffer; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; /** * 注意:只是功能验证,没有实现资源释放。 @@ -54,7 +53,7 @@ public class ShareVideoCapturer implements VideoCapturer { null ); this.clearBuffer(buffer); - final List buffers = new ArrayList<>(); + final AtomicInteger index = new AtomicInteger(0); while(ShareVideoCapturer.this.running) { synchronized (ShareVideoCapturer.this.frames) { do { @@ -65,6 +64,7 @@ public class ShareVideoCapturer implements VideoCapturer { Log.e(ShareVideoCapturer.class.getSimpleName(), "等待异常", e); } } while(ShareVideoCapturer.this.frames.isEmpty()); + index.set(0); ShareVideoCapturer.this.frames.forEach((k, v) -> { final VideoFrame.Buffer c = v.getBuffer(); final VideoFrame.Buffer o = c.cropAndScale(0, 0, c.getWidth(), c.getHeight(), width_, height_); @@ -73,18 +73,19 @@ public class ShareVideoCapturer implements VideoCapturer { // buffer.getDataY().put(x.getDataY()); // buffer.getDataU().put(x.getDataU()); // buffer.getDataV().put(x.getDataV()); - buffers.add(x); - o.release(); - v.release(); - }); - for (int i = 0; i < buffers.size(); i++) { - final int row_ = i / col; - final int col_ = i % col; + final int row_ = index.get() / col; + final int col_ = index.get() % col; final int dstX = col_ * width_; final int dstY = row_ * height_; - ShareVideoCapturer.this.copyBuffer(buffers.get(i), buffer, dstX, dstY); - } - buffers.clear(); + ShareVideoCapturer.this.copyBuffer(x, buffer, dstX, dstY); + x.release(); + o.release(); + v.release(); + index.incrementAndGet(); + if(index.get() >= col * row) { + index.set(0); + } + }); ShareVideoCapturer.this.frames.clear(); final VideoFrame frame = new VideoFrame( buffer,