comparison libervia/cli/call_tui.py @ 4233:d01b8d002619

cli (call, file), frontends: implement webRTC data channel transfer: - file send/receive commands now supports webRTC transfer. In `send` command, the `--webrtc` flags is currenty used to activate it. - WebRTC related code have been factorized and moved to `libervia.frontends.tools.webrtc*` modules. rel 442
author Goffi <goffi@goffi.org>
date Sat, 06 Apr 2024 13:43:09 +0200
parents 9218d4331bb2
children 79c8a70e1813
comparison
equal deleted inserted replaced
4232:0fbe5c605eb6 4233:d01b8d002619
25 import gi 25 import gi
26 from rich.padding import Padding 26 from rich.padding import Padding
27 from term_image import image as t_image 27 from term_image import image as t_image
28 28
29 from libervia.cli.constants import Const as C 29 from libervia.cli.constants import Const as C
30 from libervia.frontends.tools import webrtc 30 from libervia.frontends.tools import aio, webrtc
31 from libervia.frontends.tools.webrtc import CallData, WebRTCCall
31 32
32 from .call_simple import BaseAVTUI 33 from .call_simple import BaseAVTUI
33 from .call_webrtc import CallData, WebRTCCall
34 34
35 gi.require_versions({"Gst": "1.0", "GstWebRTC": "1.0"}) 35 gi.require_versions({"Gst": "1.0", "GstWebRTC": "1.0"})
36 36
37 from gi.repository import Gst 37 from gi.repository import Gst
38
39
40 aio.install_glib_asyncio_iteration()
38 41
39 42
40 class AVCallUI(BaseAVTUI): 43 class AVCallUI(BaseAVTUI):
41 def __init__(self, parent): 44 def __init__(self, parent):
42 super().__init__(parent.host, align="center") 45 super().__init__(parent.host, align="center")
72 kwargs = self.parse_output_opts(self.parent) 75 kwargs = self.parse_output_opts(self.parent)
73 if "target_size" not in kwargs: 76 if "target_size" not in kwargs:
74 # we use low res by default for performance reason 77 # we use low res by default for performance reason
75 kwargs["target_size"] = (640, 380) 78 kwargs["target_size"] = (640, 380)
76 webrtc_call = await WebRTCCall.make_webrtc_call( 79 webrtc_call = await WebRTCCall.make_webrtc_call(
77 self.parent.host, 80 self.parent.host.bridge,
78 self.parent.profile, 81 self.parent.profile,
79 call_data, 82 call_data,
80 sinks=webrtc.SINKS_APP, 83 sinks=webrtc.SINKS_APP,
81 appsink_data=webrtc.AppSinkData( 84 appsink_data=webrtc.AppSinkData(
82 local_video_cb=partial(self.on_new_sample, video_stream="local"), 85 local_video_cb=partial(self.on_new_sample, video_stream="local"),
83 remote_video_cb=None, 86 remote_video_cb=None,
84 ), 87 ),
85 merge_pip=True, 88 merge_pip=True,
89 # we want to be sure that call is ended if user presses `Ctrl + c` or anything
90 # else stops the session.
91 on_call_setup_cb=lambda sid, profile: self.parent.host.add_on_quit_callback(
92 self.parent.host.bridge.call_end, sid, "", profile
93 ),
94 on_call_ended_cb=lambda sid, profile: self.parent.host.a_quit(),
86 **kwargs, 95 **kwargs,
87 ) 96 )
88 self.webrtc = webrtc_call.webrtc 97 self.webrtc = webrtc_call.webrtc
89 98
90 async def start(self, call_data): 99 async def start(self, call_data):