Spaces:
Paused
Paused
| import streamlit as st | |
| from streamlit_webrtc import webrtc_streamer, VideoTransformerBase | |
| import av | |
| import cv2 | |
| # Video Transformer Class for Rotating Stream | |
| class RotatedVideoTransformer(VideoTransformerBase): | |
| def transform(self, frame): | |
| img = frame.to_ndarray(format="bgr24") | |
| rotated_img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) # Rotate 90 degrees | |
| return av.VideoFrame.from_ndarray(rotated_img, format="bgr24") | |
| # Streamlit UI | |
| st.title("Live Webcam Streaming with Rotation") | |
| # Text Input and Confirm Button | |
| user_input = st.text_input("Enter some text:") | |
| if st.button("Confirm"): | |
| st.write(f"You entered: {user_input}") | |
| # WebRTC Configuration with STUN + TURN Server | |
| rtc_configuration = { | |
| "iceServers": [ | |
| {"urls": ["stun:stun.l.google.com:19302"]}, # Google STUN Server | |
| { | |
| "urls": "turn:turn.nordvpn.com:1194", # Free TURN server (NordVPN) | |
| "username": "random_username", | |
| "credential": "random_password" | |
| } | |
| ] | |
| } | |
| # Original Webcam Stream | |
| st.subheader("Original Video Stream") | |
| webrtc_streamer( | |
| key="original", | |
| media_stream_constraints={"video": True, "audio": False}, | |
| rtc_configuration=rtc_configuration, # Use STUN + TURN | |
| ) | |
| # Rotated Webcam Stream | |
| st.subheader("Rotated Video Stream") | |
| webrtc_streamer( | |
| key="rotated", | |
| video_transformer_factory=RotatedVideoTransformer, | |
| media_stream_constraints={"video": True, "audio": False}, | |
| rtc_configuration=rtc_configuration, # Use STUN + TURN | |
| ) | |