Open rubygobay opened 4 months ago
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)
Here My Result
Here My Code