Skip to main content

Janus WebRTC gateway Python async client.

Project description

Python Janus Client

Janus WebRTC gateway Python async client.

PyPI - License PyPI - Status PyPI - Downloads Documentation Status Code Coverage


Install

pip install janus-client

Requires Python >=3.7 <3.11

NOTE: MacBook Air M1 macOS Ventura requires Python >=3.8


Description

Easily send and share WebRTC media through Janus WebRTC server.

This client is using aiortc for WebRTC communication and subsequently PyAV for media stack.

✅ Features ✅

  • Connect to Janus server using:
    • Websocket
    • HTTP
  • Authentication with shared static secret (API key) and/or stored token
  • Support Admin/Monitor API:
    • Generic requests
    • Configuration related requests
    • Token related requests
  • Support Janus plugins:
  • Simple interface
  • Minimum dependency
  • Extendable Janus transport

Examples

Simple Connect And Disconnect

import asyncio
from janus_client import JanusSession, JanusEchoTestPlugin, JanusVideoRoomPlugin

# Protocol will be derived from base_url
base_url = "wss://janusmy.josephgetmyip.com/janusbasews/janus"
# OR
base_url = "https://janusmy.josephgetmyip.com/janusbase/janus"

session = JanusSession(base_url=base_url)

plugin_handle = JanusEchoTestPlugin()

# Attach to Janus session
await plugin_handle.attach(session=session)

# Destroy plugin handle
await plugin_handle.destroy()

This will create a plugin handle and then destroy it.

Notice that we don't need to call connect or disconnect explicitly. It's managed internally.

Make Video Calls

import asyncio
from janus_client import JanusSession, JanusVideoCallPlugin
from aiortc.contrib.media import MediaPlayer, MediaRecorder

async def main():
    # Create session
    session = JanusSession(
        base_url="wss://janusmy.josephgetmyip.com/janusbasews/janus",
    )

    # Create plugin
    plugin_handle = JanusVideoCallPlugin()

    # Attach to Janus session
    await plugin_handle.attach(session=session)

    # Prepare username and media stream
    username = "testusernamein"
    username_out = "testusernameout"

    player = MediaPlayer(
        "desktop",
        format="gdigrab",
        options={
            "video_size": "640x480",
            "framerate": "30",
            "offset_x": "20",
            "offset_y": "30",
        },
    )
    recorder = MediaRecorder("./videocall_record_out.mp4")

    # Register myself as testusernameout
    result = await plugin_handle.register(username=username_out)

    # Call testusernamein
    result = await plugin_handle.call(
        username=username, player=player, recorder=recorder
    )

    # Wait awhile then hangup
    await asyncio.sleep(30)

    result = await plugin_handle.hangup()

    # Destroy plugin
    await plugin_handle.destroy()

    # Destroy session
    await session.destroy()


if __name__ == "__main__":
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        pass

This example will register to the VideoCall plugin using username testusernameout. It will then call the user registered using the username testusernamein.

A portion of the screen will be captured and sent in the call media stream. The incoming media stream will be saved into videocall_record_out.mp4 file.

Documentation

https://janus-client-in-python.readthedocs.io/

Experiments

FFmpeg support for VideoRoom plugin has now been moved to experiments folder, together with GStreamer support.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

janus_client-0.7.0.tar.gz (31.2 kB view details)

Uploaded Source

Built Distribution

janus_client-0.7.0-py3-none-any.whl (40.1 kB view details)

Uploaded Python 3

File details

Details for the file janus_client-0.7.0.tar.gz.

File metadata

  • Download URL: janus_client-0.7.0.tar.gz
  • Upload date:
  • Size: 31.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.4 Windows/10

File hashes

Hashes for janus_client-0.7.0.tar.gz
Algorithm Hash digest
SHA256 d29a2a48e6808486fe2aec3d564cf5f9a36204d9c88599d8af779cba6b7d6df0
MD5 37b20b88270761c17a19f054de64f091
BLAKE2b-256 d5ff53d4859ddd9e78339c9fdf20a5c0a2fb187e47d567f05761b4dc6def284f

See more details on using hashes here.

File details

Details for the file janus_client-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: janus_client-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 40.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.4 Windows/10

File hashes

Hashes for janus_client-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dc21fb5b0b2ffa897e93932aa6eb1b11b164b1ebd4e5335efe2cdfdb03560c2a
MD5 bc35deee8c6b55d5b932781633d7f2f3
BLAKE2b-256 15a09159eb8619cc89ceff1ed142988e072d9046a8a7e847482cbaa049c58aed

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page