Mercurial > libervia-backend
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): |