Metadata-Version: 2.4
Name: janus-audiobridge-plugin
Version: 3.0.0
Summary: Typed AudioBridge plugin client for janus-api-core
Author: Janus API contributors
License-Expression: MIT
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: AsyncIO
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: janus-api-core<4,>=3
Requires-Dist: pydantic<3,>=2.7
Provides-Extra: test
Requires-Dist: pytest>=8; extra == "test"
Requires-Dist: build>=1.2; extra == "test"

# janus-audiobridge-plugin

Typed, async bindings for the Janus AudioBridge plugin. The distribution is
independent from other named Janus plugins and depends only on
`janus-api-core>=3,<4`.

```python
from janus_audiobridge_plugin import AudioBridgeJoinRequest, AudioBridgePlugin
from janus_api.models.base import Jsep

async with AudioBridgePlugin(session=session) as bridge:
    await bridge.join(AudioBridgeJoinRequest(room=1234))
    reply = await bridge.configure(
        jsep=Jsep(type="offer", sdp=local_offer),
    )
    answer = reply.jsep
```

The reverse offer/answer flow is supported without changing negotiation roles:

```python
async with AudioBridgePlugin(session=session) as bridge:
    offered = await bridge.request_offer(room=1234)
    await bridge.answer_offer(Jsep(type="answer", sdp=local_answer))
```

Plain-RTP injection is represented by `AudioBridgeRtpTransport()`: an empty
object intentionally means send-only. Supplying only one of `ip` and `port` is
rejected before a malformed request reaches Janus.

All outbound models reject unknown fields and serialize only values explicitly
provided by the caller. Inbound models retain unknown fields so a newer Janus
server can add response metadata without breaking this client.

Protocol reference: <https://janus.conf.meetecho.com/docs/audiobridge.html>

