import streamlit as st from streamlit_webrtc import webrtc_streamer, get_hf_ice_servers, get_twilio_ice_servers, __version__ as st_webrtc_version import aiortc import logging logging.basicConfig(level=logging.INFO) aioice_logger = logging.getLogger("aioice") aioice_logger.setLevel(logging.DEBUG) aiortc_logger = logging.getLogger("aiortc") aiortc_logger.setLevel(logging.DEBUG) aiortc_rtcrtpreceiver_logger = logging.getLogger("aiortc.rtcrtpreceiver") aiortc_rtcrtpreceiver_logger.setLevel(logging.INFO) aiortc_rtcrtpsender_logger = logging.getLogger("aiortc.rtcrtpsender") aiortc_rtcrtpsender_logger.setLevel(logging.INFO) frontend_ice_type = st.selectbox("Frontend ICE type", ["Empty", "Google STUN", "Twilio STUN/TURN", "Twilio STUN/TURN and Google STUN", "HF TURN only", "HF TURN and Google STUN", "None configured"]) backend_ice_type = st.selectbox("Backend ICE type", ["Empty", "Google STUN", "Twilio STUN/TURN", "Twilio STUN/TURN and Google STUN", "HF TURN only", "HF TURN and Google STUN", "None configured"]) TWILIO_ICE_SERVERS = get_twilio_ice_servers( twilio_sid=st.secrets["TWILIO_ACCOUNT_SID"], twilio_token=st.secrets["TWILIO_AUTH_TOKEN"], ) HF_ICE_SERVERS = get_hf_ice_servers(token=st.secrets["HF_TOKEN"]) # google_stun_ice_servers = [{"urls": ["stun:stun.l.google.com:19302"]}] google_stun_ice_servers = [{"urls": "stun:stun.l.google.com:19302", "url": "stun:stun.l.google.com:19302"}] if frontend_ice_type == "Empty": frontend_rtc_configuration = { "iceServers": [] } elif frontend_ice_type == "Google STUN": frontend_rtc_configuration = { "iceServers": google_stun_ice_servers } elif frontend_ice_type == "Twilio STUN/TURN": frontend_rtc_configuration = { "iceServers": TWILIO_ICE_SERVERS } elif frontend_ice_type == "Twilio STUN/TURN and Google STUN": frontend_rtc_configuration = { "iceServers": google_stun_ice_servers + TWILIO_ICE_SERVERS } elif frontend_ice_type == "HF TURN only": frontend_rtc_configuration = { "iceServers": HF_ICE_SERVERS } elif frontend_ice_type == "HF TURN and Google STUN": frontend_rtc_configuration = { "iceServers": HF_ICE_SERVERS + google_stun_ice_servers } elif frontend_ice_type == "None configured": frontend_rtc_configuration = None if backend_ice_type == "Empty": backend_rtc_configuration = { "iceServers": [] } elif backend_ice_type == "Google STUN": backend_rtc_configuration = { "iceServers": google_stun_ice_servers } elif backend_ice_type == "Twilio STUN/TURN": backend_rtc_configuration = { "iceServers": TWILIO_ICE_SERVERS } elif backend_ice_type == "Twilio STUN/TURN and Google STUN": backend_rtc_configuration = { "iceServers": google_stun_ice_servers + TWILIO_ICE_SERVERS + google_stun_ice_servers } elif backend_ice_type == "HF TURN only": backend_rtc_configuration = { "iceServers": HF_ICE_SERVERS } elif backend_ice_type == "HF TURN and Google STUN": backend_rtc_configuration = { "iceServers": HF_ICE_SERVERS + google_stun_ice_servers } elif backend_ice_type == "None configured": backend_rtc_configuration = None if st.checkbox("Add invalid TURN server"): backend_rtc_configuration["iceServers"].append({ "urls":"turn:gradio-turn.com:80", "username":"non-existing-username", "credential":"non-existing-credential" }) st.write("Frontend ICE configuration:", frontend_rtc_configuration) st.write("Backend ICE configuration:", backend_rtc_configuration) webrtc_streamer( key="example", media_stream_constraints={"video": True, "audio": False}, frontend_rtc_configuration=frontend_rtc_configuration, server_rtc_configuration=backend_rtc_configuration, ) st.write(f"Streamlit version: {st.__version__}") st.write(f"Streamlit-WebRTC version: {st_webrtc_version}") st.write(f"aiortc version: {aiortc.__version__}")