livekit / python-sdks

LiveKit real-time and server SDKs for Python
https://docs.livekit.io
Apache License 2.0
72 stars 23 forks source link

I Have Trouble While Publish VideoCapture using OpenCV, The Camera Get Blurred when displayed on meet.livekit.io/custom #170

Open rubygobay opened 4 months ago

rubygobay commented 4 months ago

Here My Result

gambar

Here My Code

async def main(room: rtc.Room):
    url = "LINK"
    logging.info("connecting to %s", url)
    try:
        await room.connect(url,
                           "TOKEN")
        logging.info("connected to room %s", room.name)
    except rtc.ConnectError as e:
        logging.error("failed to connect to the room: %s", e)
        return

    # publish a track
    source = rtc.VideoSource(WIDTH, HEIGHT)
    track = rtc.LocalVideoTrack.create_video_track("hue", source)
    options = rtc.TrackPublishOptions()
    options.source = rtc.TrackSource.SOURCE_CAMERA
    publication = await room.local_participant.publish_track(track, options)
    logging.info("published track %s", publication.sid)

    asyncio.ensure_future(capture_and_process_frame(source))
async def capture_and_process_frame(source: rtc.VideoSource):
    argb_frame = bytearray(WIDTH * HEIGHT * 4)
    cap = cv2.VideoCapture(0)  # Assuming device index 0 for your webcam
    arr = np.frombuffer(argb_frame, dtype=np.uint8)

    while True:
        start_time = asyncio.get_event_loop().time()

        ret_val, frame = cap.read()
        rgba = cv2.cvtColor(frame, cv2.COLOR_RGB2RGBA)

        argb_color = np.array(rgba, dtype=np.uint8)
        arr.flat[::4] = argb_color[0]
        arr.flat[1::4] = argb_color[1]
        arr.flat[2::4] = argb_color[2]
        arr.flat[3::4] = argb_color[3]

        frame = rtc.VideoFrame(WIDTH, HEIGHT, rtc.VideoBufferType.RGBA, argb_frame)
        source.capture_frame(frame)

        code_duration = asyncio.get_event_loop().time() - start_time
        await asyncio.sleep(1 / 30 - code_duration)