跳转到主要内容

通过WebRTC将X窗口作为MediaStream转发

项目描述

x2webrtc

PyPI PyPI Supported Python Versions GitHub license

x2webrtc是一个命令行工具,用于将X窗口作为媒体轨道通过WebRTC转发。这是一个简单的工具;它只是使用Xlib抓取窗口的截图并通过WebRTC流发送,但它可以实现以下功能

  • 您可以通过NAT发送X窗口。
  • 使用安全方法传输媒体流。(与标准VNC相比)
  • 您可以通过pip轻松安装它。
  • 您不一定需要系统的管理员访问权限。

安装

注意:使用此工具需要Python 3.6+和X窗口系统。

pip install x2webrtc

此工具需要aiortc与WebRTC一起工作。如果您自动安装失败,请参阅aiortc安装说明

快速入门

注意:当前,需要手动信号来启动WebRTC会话。我计划实现一个插件系统,以便用户可以自定义其信号方法。

  1. 启动x2webrtc。

    x2webrtc forward
    

    如果DISPLAY环境变量未设置为您的环境,请传递--display参数以指定X服务器。

    x2webrtc forward --display :0
    
  2. (暂定)复制WebRTC出价。您将在终端看到以下消息

    -- Please send this message to the remote party --
    {"sdp": "..." , "type": "offer"}
    

    请复制出价json。

  3. (暂定)打开网络查看器并单击连接按钮。

  4. (暂定) 将报价 JSON 粘贴到 输入报价 文本框(A)中,然后点击 创建答案 按钮(B)。然后您将获得一个答案 JSON(C)。再次复制 JSON。

  5. (暂定) 返回您的终端。将答案 JSON 粘贴到终端中,然后按 Enter。

  6. 现在您将在网页浏览器中看到您的屏幕。

用法

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.pyCopyAndPasteSignaling 类。

常见问题解答

无法安装 PyAV

PyAV 在其源代码中使用 AV_CODEC_CAP_HARDWARE 宏,但似乎在 libavcodec >= 58.0 中可用。检查 libavcodec 的版本,然后重试。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

本发布中没有可用的源代码分发文件。请参阅有关 生成分发存档 的教程。

构建分发

x2webrtc-0.2.0-py3-none-any.whl (14.3 kB 查看散列)

上传时间 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面