Skip to main content

Janus WebRTC gateway Python async client.

Project description

Python Janus Client

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

Janus WebRTC gateway Python async client.


Install

pip install janus-client

Description

This Python client communicates with Janus WebRTC server to use provided services.

It's using aiortc for WebRTC communication and subsequently PyAV for media stack.

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

Goals

  • Simple interface
  • Minimal dependency/Maximum compatibility
  • Extendable

✅ Features ✅

  • Connect to Janus server using:
    • Websocket
    • HTTP
  • Manage Janus client connection, session, and plugins
  • Multiple connections in parallel
  • Direct message transactions to correct senders asynchronously
  • Support authentication with shared static secret (API key) and/or stored token
  • Expose Admin/Monitor API client
  • Support Janus plugins:

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/

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.6.0.tar.gz (31.5 kB view details)

Uploaded Source

Built Distribution

janus_client-0.6.0-py3-none-any.whl (34.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: janus_client-0.6.0.tar.gz
  • Upload date:
  • Size: 31.5 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.6.0.tar.gz
Algorithm Hash digest
SHA256 10039e84cb58f8668a66a2ebb7e261d49bff321f4501bbc337194c871fedb289
MD5 533955125679a31b60580cdbefbe0da6
BLAKE2b-256 b4d35aad84f13224c232dfb83690f3f0c316657c1853cd3aa3b381dab9302218

See more details on using hashes here.

File details

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

File metadata

  • Download URL: janus_client-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 34.4 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.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 65a8f626eff7e1d187130d21ba2620f0c87a580e73c6c2a1190d34ccd2551923
MD5 269f0b258f8ca19c2b77b05139f40378
BLAKE2b-256 df96cb8d9971d65688f17a508e97101a6dc36ced383535b2db12e11ab6987d31

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