2424#from gevent import pywsgi
2525#from geventwebsocket.handler import WebSocketHandler
2626import re
27+ import os
2728import numpy as np
2829from threading import Thread ,Event
2930#import multiprocessing
@@ -76,6 +77,7 @@ def build_avatar_session(sessionid:str, params:dict)->BaseAvatar:
7677 opt_this .sessionid = sessionid
7778
7879 avatar_id = params .get ('avatar' ,opt .avatar_id )
80+ opt_this .avatar_id = avatar_id
7981 ref_audio = params .get ('refaudio' ,'' ) #音色
8082 ref_text = params .get ('reftext' ,'' )
8183 if (avatar_id and avatar_id != opt .avatar_id ):
@@ -102,6 +104,17 @@ async def offer(request):
102104async def on_shutdown (app ):
103105 await rtc_manager .shutdown ()
104106
107+ async def download_record (request ):
108+ sessionid = request .match_info .get ('sessionid' )
109+ if not sessionid :
110+ return web .Response (status = 400 , text = "sessionid is required" )
111+
112+ record_file = os .path .join ('data' , 'record' , f"{ sessionid } .mp4" )
113+
114+ if os .path .exists (record_file ):
115+ return web .FileResponse (record_file )
116+ else :
117+ return web .Response (status = 404 , text = "Record not found" )
105118
106119
107120def main ():
@@ -152,9 +165,12 @@ def main():
152165 #############################################################################
153166 appasync = web .Application (client_max_size = 1024 ** 2 * 100 )
154167 appasync ["llm_response" ] = llm_response
168+ appasync ["opt" ] = opt
169+ appasync ["rtc_manager" ] = rtc_manager
155170
156171 appasync .on_shutdown .append (on_shutdown )
157172 appasync .router .add_post ("/offer" , offer )
173+ appasync .router .add_get ("/record/{sessionid}" , download_record )
158174
159175 # 注册 server/routes.py 中的通用 API 路由
160176 setup_routes (appasync )
@@ -171,13 +187,13 @@ def main():
171187 for route in list (appasync .router .routes ()):
172188 cors .add (route )
173189
174- pagename = 'webrtcapi .html'
190+ pagename = 'index .html'
175191 if opt .transport == 'rtmp' :
176192 pagename = 'rtmpapi.html'
177193 elif opt .transport == 'rtcpush' :
178194 pagename = 'rtcpushapi.html'
179195 logger .info ('start http server; http://<serverip>:' + str (opt .listenport )+ '/' + pagename )
180- logger .info ('如果使用webrtc,推荐访问webrtc集成前端: http://<serverip>:' + str (opt .listenport )+ '/dashboard.html' )
196+ # logger.info('如果使用webrtc,推荐访问webrtc集成前端: http://<serverip>:'+str(opt.listenport)+'/dashboard.html')
181197 def run_server (runner ):
182198 loop = asyncio .new_event_loop ()
183199 asyncio .set_event_loop (loop )
0 commit comments