Philippe Normand
be12c0a5f7
Fix clippy warnings after upgrade to Rust 1.77
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1512 >
2024-03-21 17:33:32 +00:00
François Laignel
c5e7e76e4d
webrtcsrc: add do-retransmission property
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1509 >
2024-03-21 07:25:30 +00:00
François Laignel
5476e3d759
webrtcsink: prevent video-info error log for audio streams
...
The following error is logged when `webrtcsink` is feeded with an audio stream:
> ERROR video-info video-info.c:540:gst_video_info_from_caps:
> wrong name 'audio/x-raw', expected video/ or image/
This commit bypasses `VideoInfo::from_caps` for audio streams.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1511 >
2024-03-20 19:57:45 +01:00
François Laignel
cc7b7d508d
rtp: gccbwe: don't break downstream assumptions pushing buffer lists
...
Some elements in the RTP stack assume all buffers in a `gst::BufferList`
correspond to the same timestamp. See in [`rtpsession`] for instance.
This also had the effect that `rtpsession` did not create correct RTCP as it
only saw some of the SSRCs in the stream.
`rtpgccbwe` formed a packet group by gathering buffers in a `gst::BufferList`,
regardless of whether they corresponded to the same timestamp, which broke
synchronization under certain circonstances.
This commit makes `rtpgccbwe` push the buffers as they were received: one by one.
[`rtpsession`]: bc858976db/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpsession.c (L2462)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1502 >
2024-03-20 18:19:14 +00:00
Sebastian Dröge
cca3ebf520
rtp: Switch from chrono to time
...
Which allows to simplify quite a bit of code and avoids us having to
handle some API deprecations.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1503 >
2024-03-20 15:05:39 +02:00
Guillaume Desmottes
96337d5234
webrtc: allow resolution and framerate input changes
...
Some changes do not require a WebRTC renegotiation so we can allow
those.
Fix #515
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1498 >
2024-03-18 14:52:01 +01:00
Tim-Philipp Müller
eb49459937
rtp: m2pt: add some unit tests
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1493 >
2024-03-16 10:07:37 +00:00
Tim-Philipp Müller
ce3960f37f
rtp: Add MPEG-TS RTP payloader
...
Pushes out pending TS packets on EOS.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1493 >
2024-03-16 10:07:37 +00:00
Tim-Philipp Müller
9f07ec35e6
rtp: Add MPEG-TS RTP depayloader
...
Can handle different packet sizes, also see:
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1310
Has clock-rate=90000 as spec prescribes, see:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/691
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1493 >
2024-03-16 10:07:37 +00:00
Guillaume Desmottes
8f997ea4e3
webrtc: janus: handle 'hangup' messages from Janus
...
Fix error about this message not being handled:
{
"janus": "hangup",
"session_id": 4758817463851315,
"sender": 4126342934227009,
"reason": "Close PC"
}
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1481 >
2024-03-13 10:14:38 +00:00
Guillaume Desmottes
992f8d9a5d
webrtc: janus: handle 'destroyed' messages from Janus
...
Fix this error when the room is destroyed:
ERROR webrtc-janusvr-signaller imp.rs:413:gstrswebrtc::janusvr_signaller:👿 :Signaller::handle_msg:<GstJanusVRWebRTCSignallerU64@0x55b166a3fe40> Unknown message from server: {
"janus": "event",
"session_id": 6667171862739941,
"sender": 1964690595468240,
"plugindata": {
"plugin": "janus.plugin.videoroom",
"data": {
"videoroom": "destroyed",
"room": 8320333573294267
}
}
}
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1481 >
2024-03-13 10:14:38 +00:00
Guillaume Desmottes
9c6a39d692
webrtc: janus: handle (stopped-)talking events
...
Expose those events using a signal.
Fix those errors when joining a Janus room configured with
'audiolevel_event: true'.
ERROR webrtc-janusvr-signaller imp.rs:408:gstrswebrtc::janusvr_signaller:👿 :Signaller::handle_msg:<GstJanusVRWebRTCSignaller@0x560cf2a55100> Unknown message from server: {
"janus": "event",
"session_id": 2384862538500481,
"sender": 1867822625190966,
"plugindata": {
"plugin": "janus.plugin.videoroom",
"data": {
"videoroom": "talking",
"room": 7564250471742314,
"id": 6815475717947398,
"mindex": 0,
"mid": "0",
"audio-level-dBov-avg": 37.939998626708984
}
}
}
ERROR webrtc-janusvr-signaller imp.rs:408:gstrswebrtc::janusvr_signaller:👿 :Signaller::handle_msg:<GstJanusVRWebRTCSignaller@0x560cf2a55100> Unknown message from server: {
"janus": "event",
"session_id": 2384862538500481,
"sender": 1867822625190966,
"plugindata": {
"plugin": "janus.plugin.videoroom",
"data": {
"videoroom": "stopped-talking",
"room": 7564250471742314,
"id": 6815475717947398,
"mindex": 0,
"mid": "0",
"audio-level-dBov-avg": 40.400001525878906
}
}
}
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1481 >
2024-03-13 10:14:38 +00:00
François Laignel
5b01e43a12
webrtc: update further to WebRTCSessionDescription sdp accessor changes
...
See: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1406
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1491 >
2024-03-11 13:39:19 +01:00
Zhao, Gang
7a46377627
rtp: tests: Simplify loop
...
All buffers can be added in 100 outer loops. Add buffer less than 200 in the last (i = 99) loop.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1489 >
2024-03-10 16:47:30 +08:00
Guillaume Desmottes
612f863ee9
webrtc: janusvrwebrtcsink: add 'use-string-ids' property
...
Instead of exposing all ids properties as strings, we now have two
signaller implementations exposing those properties using their actual
type. This API is more natural and save the element and application
conversions when using numerical ids (Janus's default).
I also removed the 'joined-id' property as it's actually the same id as
'feed-id'. I think it would be better to have a 'janus-state' property or
something like that for applications willing to know when the room has
been joined.
This id is also no longer generated by the element by default, as Janus
will take care of generating one if not provided.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1486 >
2024-03-07 09:34:58 +01:00
Sebastian Dröge
2839e0078b
rtp: Port RTP AV1 payloader/depayloader to new base classes
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1472 >
2024-03-06 09:40:35 +00:00
Jordan Yelloz
0414f468c6
livekit_signaller: Added missing getter for excluded-producer-peer-ids
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1484 >
2024-03-04 10:08:11 -07:00
Jordan Yelloz
8b0731b5a2
webrtcsrc: Removed incorrect URIHandler from LiveKit source
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1484 >
2024-03-04 09:44:01 -07:00
Jordan Yelloz
002dc36ab9
livekit_signaller: Improved shutdown behavior
...
Without sending a Leave request to the server before disconnecting, the
disconnected client will appear present and stuck in the room for a little
while until the server removes it due to inactivity.
After this change, the disconnecting client will immediately leave the room.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1482 >
2024-02-29 08:21:13 -07:00
Jordan Yelloz
f0b408d823
webrtcsrc: Removed flag setup from WhipServerSrc
...
It's already done in the base class
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1461 >
2024-02-28 11:25:58 -07:00
Jordan Yelloz
17b2640237
webrtcsrc: Updated readme for LiveKit source
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1461 >
2024-02-28 11:25:58 -07:00
Jordan Yelloz
fa006b9fc9
webrtcsrc: Added LiveKit source element
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1461 >
2024-02-28 11:25:58 -07:00
Jordan Yelloz
96037fbcc5
webrtcsink: Updated livekitwebrtcsink for new signaller constructor
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1461 >
2024-02-28 11:25:58 -07:00
Jordan Yelloz
730b3459f1
livekit_signaller: Added dual-role support
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1461 >
2024-02-28 11:25:49 -07:00
Guillaume Desmottes
60bb72ddc3
webrtc: janus: add joined-id property to the signaller
...
Fix #504
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1480 >
2024-02-28 15:05:11 +01:00
Guillaume Desmottes
eabf31e6d0
webrtc: janus: rename RoomId to JanusId
...
Those weird ids are used in multiple places, not only for the room id,
so best to have a more generic name.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1480 >
2024-02-28 15:05:11 +01:00
Guillaume Desmottes
550018c917
webrtc: janus: room id not optional in 'joined' message
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1480 >
2024-02-28 14:16:46 +01:00
Guillaume Desmottes
0829898d73
webrtc: janus: remove 'audio' and 'video' from publish messages
...
Those are deprecated and no longer used.
See https://janus.conf.meetecho.com/docs/videoroom and
https://github.com/meetecho/janus-gateway/blob/master/src/plugins/janus_videoroom.c#L9894
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1480 >
2024-02-28 13:39:04 +01:00
Guillaume Desmottes
ec17c58dee
webrtc: janus: numerical room ids are u64
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1478 >
2024-02-28 11:56:44 +01:00
Yorick Smilda
563eff1193
Implement GstWebRTCAPI
as class instead of global instance
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1373 >
2024-02-27 12:30:13 +00:00
Jordan Yelloz
594400a7f5
webrtcsrc: Made producer-peer-id optional
...
It may be necessary for some signalling clients but the source element
doesn't need to depend on it.
Also, the value will fall back to the pad's MSID for the first argument
to the request-encoded-filter gobject signal when it isn't available
from the signalling client.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1477 >
2024-02-26 13:41:40 -07:00
Xavier Claessens
f7ffa13543
janusvr: Add string-ids property
...
It forces usage of strings even if it can be parsed into an integer.
This allows joining room `"133"` in a server configured with string
room ids.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1466 >
2024-02-26 11:10:00 +00:00
Xavier Claessens
23955d2dbb
janusvr: Room IDs can be strings
...
Sponsored-by: Netflix Inc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1466 >
2024-02-26 11:10:00 +00:00
Sebastian Dröge
f563f8334b
rtp: Add PCMU/PCMA RTP payloader / depayloader elements
...
These come with new generic RTP payloader, RTP raw-ish audio payloader
and RTP depayloader base classes.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1424 >
2024-02-23 14:43:45 +02:00
Maksym Khomenko
da21dc853d
webrtcsink: extensions: separate API and signal checks
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1469 >
2024-02-20 19:29:46 +02:00
Maksym Khomenko
2228f882d8
webrtcsink: apply rustfmt
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1469 >
2024-02-20 19:29:28 +02:00
Xavier Claessens
2572afbf15
janusvr: Add secret-key property
...
Every API calls have an optional "apisecret" argument.
Sponsored-by: Netflix Inc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1465 >
2024-02-16 14:04:59 +00:00
Sebastian Dröge
8ef12a72e8
rtpgccbwe: Don't reset PTS/DTS to None
...
The element is usually placed before `rtpsession`, and `rtpsession`
needs the PTS/DTS for correctly determining the running time. The
running time is then used to produce correct RTCP SR, and to potentially
update an NTP-64 RTP header extension if existing on the packets.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/496
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1462 >
2024-02-14 08:05:54 +00:00
Jordan Yelloz
67b7cf9764
webrtcsink: Added sinkpad with "msid" property
...
This forwards to the webrtcbin sinkpad's msid when specified.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1442 >
2024-02-12 15:04:44 +00:00
Sebastian Dröge
b2d5ee48cd
Update to async-tungstenite 0.25
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1455 >
2024-02-11 11:31:24 +02:00
Sebastian Dröge
92891a61e8
Fix a couple of compiler/clippy warnings with --no-default-features
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1452 >
2024-02-08 13:02:55 +02:00
Nirbheek Chauhan
cf5e7f6ed3
rtspsrc2: Add some top-level documentation
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-08 07:21:51 +05:30
Nirbheek Chauhan
7a1cd675c2
rtspsrc2: Fix RTCP send/recv in the multicast case
...
Don't use connect(), since that is incompatible with multicast.
Instead, drop received packets that are from senders we do not want.
Also set multicast loopback = false so we don't receive RTCP RRs from
ourselves and interpret them as RTCP SRs.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-08 07:21:51 +05:30
Nirbheek Chauhan
e59f3bbe58
rtspsrc2: Increase RTP timeout to 5 seconds, matching rtspsrc
...
Also fix some logging.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-08 07:21:51 +05:30
Nirbheek Chauhan
3e963e9239
rtspsrc2: Implement NetAddressMeta support
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-08 07:21:51 +05:30
Nirbheek Chauhan
42425abb69
rtspsrc: Factor out SDP → Caps, parse more attributes
...
This could be a struct of some kind derived from sdp_types::Media etc,
but this is fine for now.
Adds parsing of framesize, and fallbacks for missing or incomplete
rtpmap.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-07 20:29:23 +05:30
Nirbheek Chauhan
437326ebfd
rtspsrc2: Allocate a buffer pool for UDP RTP data
...
Control the size with a receive-mtu property
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-07 20:29:23 +05:30
Nirbheek Chauhan
44e49a06a0
rtspsrc2: Emit EOS if any ssrc gets a BYE packet or times out
...
This allows us to exit when the live-stream ends.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-07 20:29:23 +05:30
Nirbheek Chauhan
975556c06b
rtspsrc2: Allow a SETUP response without a Transports header
...
If we only send a single Transport in the Transports header, then the
server is allowed to omit it in the response. This has some strange
consequences for UDP transport: specifically, we have no idea what
addr/port we will get the packets from.
In those cases, we connect() on the socket when we receive the first
packet, so we can send RTCP RRs, and also so we can ensure that we
ignore data from other addresses.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-07 20:29:23 +05:30
Nirbheek Chauhan
086ffd7aff
New RTSP source plugin with live streaming support
...
GST_PLUGIN_FEATURE_RANK=rtspsrc2:1 gst-play-1.0 [URI]
Features:
* Live streaming N audio and N video
- With RTCP-based A/V sync
* Lower transports: TCP, UDP, UDP-Multicast
* RTP, RTCP SR, RTCP RR
* OPTIONS DESCRIBE SETUP PLAY TEARDOWN
* Custom UDP socket management, does not use udpsrc/udpsink
* Supports both rtpbin and the rtpbin2 rust rewrite
- Set USE_RTPBIN2=1 to use rtpbin2 (needs other MRs)
* Properties:
- protocols selection and priority (NEW!)
- location supports rtsp[ut]://
- port-start instead of port-range
Co-Authored-by: Tim-Philipp Müller <tim@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425 >
2024-02-07 20:29:18 +05:30