Commit graph

40 commits

Author SHA1 Message Date
Sebastian Dröge
9c540d8abb Move everything to net/ndi for preparing to merge into gst-plugins-rs 2022-10-12 19:25:32 +03:00
Seungha Yang
b682833cca Set discont flag on the first audio buffer correctly
Fixing typo which should check audio buffer not video
2022-02-28 22:16:45 +09:00
Sebastian Dröge
ddb3bde942 Remove unused TimeMapping struct 2022-01-22 12:13:04 +02:00
Sebastian Dröge
c221e9e870 Update to gstreamer-rs 0.18 2022-01-22 12:12:03 +02:00
Sebastian Dröge
f890abe5cb Add support for receiving compressed data from the source
This requires building against and using the NDI Advanced SDK and is
opt-in via the "advanced-sdk" cargo feature.
2021-10-01 13:12:14 +03:00
Sebastian Dröge
b98efea5aa Allow selecting the receive color format in the source 2021-10-01 12:50:57 +03:00
Sebastian Dröge
8cf682d72b Move to NDIlib_recv_capture_v3() and NDIlib_send_send_audio_v3()
These allow more control over the data that is being sent/received, but
require NDI SDK 4.0 or newer.
2021-10-01 12:50:57 +03:00
Sebastian Dröge
7483a66b66 Convert NDIlib_recv_color_format_e to a type alias with constants
There are also other values available.
2021-10-01 12:50:57 +03:00
Sebastian Dröge
e642d6a4c1 Set the RESYNC flag on buffers after time tracking state was reset 2021-09-30 17:54:15 +03:00
Sebastian Dröge
0911775142 Set the discont flag on the first audio/video buffer 2021-09-30 13:33:18 +03:00
Sebastian Dröge
9a53bcd405 Implement remote/local clock estimation with the same algorithm as the RTP jitterbuffer
This gives fewer jumps and generally leads to smoother and more correct
results, while at the same time also being faster.
2021-09-30 13:29:12 +03:00
Sebastian Dröge
0c89e0819f Use gst::Element::current_running_time() instead of manually implementing it 2021-09-30 11:02:26 +03:00
Sebastian Dröge
febb2fb035 Add receive-time timestamping mode
This directly uses the receive times of each packet.
2021-09-30 11:02:26 +03:00
Sebastian Dröge
b3184b45bc Combine audio/video source into a single element and add a demuxer for that
This simplifies the code considerably.
2021-09-29 14:48:32 +03:00
Sebastian Dröge
291d951b01 Update to gstreamer-rs 0.17 2021-09-13 13:43:31 +03:00
Sebastian Dröge
7604a0c596 Make the maximum receive queue length size configurable 2021-08-02 08:45:32 +03:00
Sebastian Dröge
84e4fe7f59 Add new timestamp mode based on the receive time and timecode
In addition to the old one based on the receive time and timestamp.

Also make that new mode the default as it will usually give more
accurate results because the timestamp is just the send time while the
timecode is usually set by the sender based on the media timestamps.
2021-02-26 11:00:23 +02:00
Sebastian Dröge
4e93604fe9 Fix various clippy warnings 2021-02-23 12:46:27 +02:00
Sebastian Dröge
0aef5152a7 Simplify code for Rust 2018 a bit 2021-02-23 12:37:24 +02:00
Sebastian Dröge
eee4a65d19 Update to byte-slice-cast 1.0 and switch from lazy_static to once_cell 2021-02-23 12:29:04 +02:00
Ruben Gonzalez
c1d9c0e958
Merge pull request #51 from sdroege/timeouts
Only consider timeouts if configure bigger than 0
2020-09-07 20:20:45 +02:00
Sebastian Dröge
3ea203825a Only consider timeouts if configure bigger than 0
Configuring 0 will never time out.
2020-09-01 21:38:43 +03:00
Sebastian Dröge
5fa3b689f0 Update to gstreamer-rs 0.16 2020-07-27 16:10:39 +03:00
Sebastian Dröge
4d620cd737 Allow connecting to either an NDI name or URL/address again
Apparently the SDK allows both but the documentation was a bit
confusing.
2020-01-20 22:01:33 +02:00
Sebastian Dröge
8d2c025e47 Allow creating source elements from the device provider and don't do discovery during element setup anymore
While making it possible to create elements from the device provider,
this also speeds up the connection generally when starting up the
elements.

Also add the url-address property for additional filtering in addition
to the NDI name.
2020-01-20 22:01:33 +02:00
Sebastian Dröge
afc301de3a Port to NDI SDK v4
Most notably this allows the video line stride to be set to 0, in which
case a default value is to be used, and it deprecates selecting NDI
sources by their IP address and because of that we remove the relevant
properties.

Usually the SDK will give an URL instead of an IP address now, so usage
would've been broken anyway.
2020-01-10 12:29:24 +02:00
Sebastian Dröge
05b807aff0 Fix some minor clippy warnings 2020-01-02 13:06:53 +02:00
Sebastian Dröge
5923adf333 Update to gstreamer 0.15 bindings release 2019-12-19 01:04:59 +02:00
Ruben Gonzalez
5f020ad5b8
Merge pull request #43 from UbiCastTeam/master
fix comparaison to detect source uniqueness in a pipeline, fixes #42
2019-08-30 10:20:29 +02:00
Amaury Denoyelle
5e10693aa6 fix comparaison to detect source uniqueness in a pipeline, fixes #42 2019-08-23 17:23:52 +02:00
Sebastian Dröge
06e5d7cb95 Depend on gstreamer 0.14.4 for gst::calculate_linear_regression()
Instead of having our own unsafe binding for it.
2019-08-14 22:49:55 +03:00
rubenrua
b0b42f8f17 Fix travis CI 2019-07-30 17:29:42 +02:00
Sebastian Dröge
cd741f37be Fix compilation with --no-default-features 2019-07-22 09:12:04 +03:00
Sebastian Dröge
3ac1a6b288 Handle receiving in the beginning without clock gracefully
We'll only have a clock once the source element is actually in Playing.
2019-07-19 13:00:27 +03:00
Sebastian Dröge
bbdfae8cdd Compare IP addresses in lowercase
Only really relevant for IPv6.
2019-07-19 12:55:18 +03:00
Sebastian Dröge
98c290602c Improve error reporting/handling
And minor refactoring.
2019-07-19 12:51:06 +03:00
Sebastian Dröge
d352a0c20d Print all found sources in the debug log 2019-07-19 12:15:08 +03:00
Sebastian Dröge
fa9f788190 Improve type-safety a bit by making the Receiver generic over the stream type 2019-07-19 11:34:20 +03:00
Sebastian Dröge
33370e42ad Collect observations for the timestamp/receive time mappings and smoothen them
This allows keeping audio/video more in sync with how the sender was
sending it, while also handling network jitter and clock drift in a
reasonable way.
2019-07-19 10:52:47 +03:00
Sebastian Dröge
66d4fd1d90 Move connecting and capturing to separate threads
This ensures that we'll be able to capture every frame even if
downstream of the source is blocking for a moment, and also allows us to
make all operations cancellable.
2019-07-18 15:44:31 +03:00