Spaces:
Sleeping
Sleeping
Commit
·
55a6464
1
Parent(s):
b6d6c89
Revert portg
Browse files
app.py
CHANGED
|
@@ -16,6 +16,7 @@ import io
|
|
| 16 |
import wave
|
| 17 |
import asyncio
|
| 18 |
import uvicorn
|
|
|
|
| 19 |
|
| 20 |
# Simplified configuration parameters
|
| 21 |
SILENCE_THRESHS = [0, 0.4]
|
|
@@ -866,17 +867,48 @@ def create_app():
|
|
| 866 |
}
|
| 867 |
else:
|
| 868 |
# Get Cloudflare TURN credentials
|
| 869 |
-
|
| 870 |
-
|
| 871 |
-
|
| 872 |
-
|
| 873 |
-
|
| 874 |
-
|
| 875 |
-
|
| 876 |
-
|
| 877 |
-
|
| 878 |
-
|
| 879 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 880 |
|
| 881 |
# Create FastRTC stream
|
| 882 |
stream = Stream(
|
|
@@ -898,6 +930,22 @@ def create_app():
|
|
| 898 |
return app
|
| 899 |
|
| 900 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 901 |
# Main entry point
|
| 902 |
if __name__ == "__main__":
|
| 903 |
# Create the app
|
|
@@ -907,6 +955,12 @@ if __name__ == "__main__":
|
|
| 907 |
host = os.environ.get("HOST", "0.0.0.0")
|
| 908 |
port = int(os.environ.get("PORT", 7860))
|
| 909 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 910 |
print(f"""
|
| 911 |
🎤 Real-time Speaker Diarization Server
|
| 912 |
=====================================
|
|
|
|
| 16 |
import wave
|
| 17 |
import asyncio
|
| 18 |
import uvicorn
|
| 19 |
+
import socket
|
| 20 |
|
| 21 |
# Simplified configuration parameters
|
| 22 |
SILENCE_THRESHS = [0, 0.4]
|
|
|
|
| 867 |
}
|
| 868 |
else:
|
| 869 |
# Get Cloudflare TURN credentials
|
| 870 |
+
try:
|
| 871 |
+
turn_credentials = get_cloudflare_turn_credentials(hf_token)
|
| 872 |
+
|
| 873 |
+
# Safely extract credentials from the response
|
| 874 |
+
ice_servers = []
|
| 875 |
+
|
| 876 |
+
# Always add STUN server
|
| 877 |
+
ice_servers.append({"urls": "stun:stun.l.google.com:19302"})
|
| 878 |
+
|
| 879 |
+
# Check for and add TURN server if available
|
| 880 |
+
if turn_credentials and isinstance(turn_credentials, dict):
|
| 881 |
+
# Handle different possible structures
|
| 882 |
+
if 'iceServers' in turn_credentials:
|
| 883 |
+
# If credentials already have iceServers, use them directly
|
| 884 |
+
rtc_config = turn_credentials
|
| 885 |
+
elif 'urls' in turn_credentials and isinstance(turn_credentials['urls'], list) and turn_credentials['urls']:
|
| 886 |
+
# Structure: {urls: [...], username: "...", credential: "..."}
|
| 887 |
+
ice_servers.append({
|
| 888 |
+
"urls": [f"turn:{url}" for url in turn_credentials["urls"]],
|
| 889 |
+
"username": turn_credentials.get("username", ""),
|
| 890 |
+
"credential": turn_credentials.get("credential", "")
|
| 891 |
+
})
|
| 892 |
+
rtc_config = {"iceServers": ice_servers}
|
| 893 |
+
elif 'url' in turn_credentials:
|
| 894 |
+
# Structure with single URL
|
| 895 |
+
ice_servers.append({
|
| 896 |
+
"urls": f"turn:{turn_credentials['url']}",
|
| 897 |
+
"username": turn_credentials.get("username", ""),
|
| 898 |
+
"credential": turn_credentials.get("credential", "")
|
| 899 |
+
})
|
| 900 |
+
rtc_config = {"iceServers": ice_servers}
|
| 901 |
+
else:
|
| 902 |
+
print("Warning: Unexpected TURN credentials format. Using STUN only.")
|
| 903 |
+
rtc_config = {"iceServers": ice_servers}
|
| 904 |
+
else:
|
| 905 |
+
print("Warning: Could not get TURN credentials. Using STUN only.")
|
| 906 |
+
rtc_config = {"iceServers": ice_servers}
|
| 907 |
+
except Exception as e:
|
| 908 |
+
print(f"Warning: Error getting TURN credentials: {e}. Using STUN only.")
|
| 909 |
+
rtc_config = {
|
| 910 |
+
"iceServers": [{"urls": "stun:stun.l.google.com:19302"}]
|
| 911 |
+
}
|
| 912 |
|
| 913 |
# Create FastRTC stream
|
| 914 |
stream = Stream(
|
|
|
|
| 930 |
return app
|
| 931 |
|
| 932 |
|
| 933 |
+
# Function to find an available port
|
| 934 |
+
def find_available_port(start_port=7860, max_tries=10):
|
| 935 |
+
"""Find an available port starting from start_port"""
|
| 936 |
+
for port_offset in range(max_tries):
|
| 937 |
+
port = start_port + port_offset
|
| 938 |
+
try:
|
| 939 |
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
| 940 |
+
sock.bind(('0.0.0.0', port))
|
| 941 |
+
sock.close()
|
| 942 |
+
return port
|
| 943 |
+
except OSError:
|
| 944 |
+
continue
|
| 945 |
+
# If no ports are available, return a default and let the server handle the error
|
| 946 |
+
return start_port
|
| 947 |
+
|
| 948 |
+
|
| 949 |
# Main entry point
|
| 950 |
if __name__ == "__main__":
|
| 951 |
# Create the app
|
|
|
|
| 955 |
host = os.environ.get("HOST", "0.0.0.0")
|
| 956 |
port = int(os.environ.get("PORT", 7860))
|
| 957 |
|
| 958 |
+
# Find available port if specified port is in use
|
| 959 |
+
available_port = find_available_port(port)
|
| 960 |
+
if available_port != port:
|
| 961 |
+
print(f"Port {port} is in use, using port {available_port} instead.")
|
| 962 |
+
port = available_port
|
| 963 |
+
|
| 964 |
print(f"""
|
| 965 |
🎤 Real-time Speaker Diarization Server
|
| 966 |
=====================================
|