通过WebRTC将X窗口作为MediaStream转发
项目描述
x2webrtc
x2webrtc是一个命令行工具,用于将X窗口作为媒体轨道通过WebRTC转发。这是一个简单的工具;它只是使用Xlib抓取窗口的截图并通过WebRTC流发送,但它可以实现以下功能
- 您可以通过NAT发送X窗口。
- 使用安全方法传输媒体流。(与标准VNC相比)
- 您可以通过pip轻松安装它。
- 您不一定需要系统的管理员访问权限。
安装
注意:使用此工具需要Python 3.6+和X窗口系统。
pip install x2webrtc
此工具需要aiortc
与WebRTC一起工作。如果您自动安装失败,请参阅aiortc
的安装说明。
快速入门
注意:当前,需要手动信号来启动WebRTC会话。我计划实现一个插件系统,以便用户可以自定义其信号方法。
-
启动x2webrtc。
x2webrtc forward
如果
DISPLAY
环境变量未设置为您的环境,请传递--display
参数以指定X服务器。x2webrtc forward --display :0
-
(暂定)复制WebRTC出价。您将在终端看到以下消息
-- Please send this message to the remote party -- {"sdp": "..." , "type": "offer"}
请复制出价json。
-
(暂定)打开网络查看器并单击
连接
按钮。 -
(暂定) 将报价 JSON 粘贴到
输入报价
文本框(A)中,然后点击创建答案
按钮(B)。然后您将获得一个答案 JSON(C)。再次复制 JSON。 -
(暂定) 返回您的终端。将答案 JSON 粘贴到终端中,然后按 Enter。
-
现在您将在网页浏览器中看到您的屏幕。
用法
usage: x2webrtc [-h] [-v] COMMANDS ...
Commands:
forward forward X Window
info show window information of the X server
optional arguments:
-h, --help show this help message and exit
-v, --verbose verbose; can be used up to 3 times to increase verbosity
x2webrtc forward
转发指定的 X 窗口。
usage: x2webrtc forward [-h] [--display DISPLAY]
optional arguments:
-h, --help show this help message and exit
--display DISPLAY display_name of the X server to connect to (e.g., hostname:1, :1.)
x2webrtc info
显示指定 X 服务器上的信息。
usage: x2webrtc info [-h] [--display DISPLAY] [--props]
optional arguments:
-h, --help show this help message and exit
--display DISPLAY display_name of the X server to connect to (e.g., hostname:1, :1.)
--props show all properties of each window
配置
优先顺序是 $X2WEBRTC_CONFIG
环境变量,然后是工作目录中的 .x2webrtc
文件,最后是 ~/.x2webrtc
。配置文件必须是 YAML 格式。以下是一个配置文件的示例
signaling_plugin: "path/to/signaling_plugin.py" # optional
peer_connection: # optional
ice_servers:
- url: stun:stun.example.com
- url: turn:turn.example.com
username: shamiko # optional
credential: momo # optional
有关更多详细信息,请参阅 x2webrtc/config.py
。
插件
您可以通过使用插件来自定义 x2webrtc 为 WebRTC 对等连接使用的信令方法。以下是一个插件实现的示例
from typing import Type
from aiortc import RTCPeerConnection
from x2webrtc.plugin import SignalingPlugin
class SomePlugin(SignalingPlugin):
async def __call__(self, pc: RTCPeerConnection) -> bool:
return True
def plugin() -> Type[SignalingPlugin]:
return SomePlugin
插件文件必须有一个返回 SignalingPlugin
子类的 plugin
函数。如配置部分所述,插件文件需要在配置文件中指定。
有关更多详细信息,请参阅位于 x2webrtc/signaling.py
的 CopyAndPasteSignaling
类。
常见问题解答
无法安装 PyAV
PyAV
在其源代码中使用 AV_CODEC_CAP_HARDWARE
宏,但似乎在 libavcodec >= 58.0
中可用。检查 libavcodec 的版本,然后重试。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
x2webrtc-0.2.0-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | f2643d26551c61963a36c2ab055053dbf9c330bcffa7743d1e221f931491623f |
|
MD5 | b73b5995c4e328859fd56b37b630ea26 |
|
BLAKE2b-256 | 4b182907cdfbbd00a641fdc4566d88ca23fca57f5f060e024ad1f8fbe22a3c44 |