Commit Graph

200 Commits

Author SHA1 Message Date
Scott Lamb
da33dddbd7 compute keepalive interval from session timeout
Alessandro Ros
[asserts](https://github.com/aler9/rtsp-simple-server/issues/1066#issuecomment-1206405770)
that some servers have timeouts shorter than 30 seconds; this should
improve compatibility with them. Also add some debug logging around
keepalives.
2022-08-07 11:01:06 -07:00
Scott Lamb
bb3baf0329 unbreak client example 2022-07-15 16:30:54 -07:00
Scott Lamb
a7942f723f remove local debugging webrtc patches 2022-07-15 16:14:53 -07:00
Scott Lamb
692bfaa04e WebRTC proxy example (#60)
This is a very basic version, as a starting point.
2022-07-15 16:12:26 -07:00
Scott Lamb
fa372865e6 upgrade mylog dep to version without parking_lot 2022-07-13 11:48:30 -07:00
Scott Lamb
3a8f11450f clippy cleanup on client example 2022-07-13 11:44:53 -07:00
Scott Lamb
978d0d7791 fixes for workspace split 2022-07-13 11:17:28 -07:00
Scott Lamb
d75d5585f5 move the client example to its own crate
We're likely to add more examples with more dependencies (e.g. ffmpeg,
gstreamer, webrtc). Nice to not have their deps in the main crate's
dev-dependencies, and likewise to have each example show its true
dependencies.

As mentioned here:
https://github.com/scottlamb/retina/issues/19#issuecomment-902302720
2022-07-13 10:51:03 -07:00
Scott Lamb
33bd057ade update some deps 2022-07-11 11:59:40 -07:00
Scott Lamb
2b700fd32b prepare v0.4.0 2022-05-17 16:48:34 -07:00
Scott Lamb
444afdd35d fix clippy error 2022-05-11 13:22:45 -07:00
Scott Lamb
88eaab7fb8 flesh out rtcp module a bit more 2022-05-11 13:09:11 -07:00
Scott Lamb
fff3acc3c9 remove dead retina::client::rtp::SenderReport 2022-05-11 12:49:01 -07:00
Scott Lamb
200a93e905 fix redundancy in Timestamp docs 2022-05-11 12:36:28 -07:00
Scott Lamb
a33ba9b8af no Bytes in AudioParameters interface either
For #47.

Along the way, I simplified `aac::Depacketizer` impl a bit, eliminating
a clone and some redundancy.
2022-05-11 11:56:42 -07:00
Scott Lamb
b1e1fa9031 codec::Parameters -> codec::ParametersRef
This reduces copying. Part of #47.
2022-05-11 11:37:09 -07:00
Scott Lamb
a36b01b715 fix clippy error 2022-05-11 11:37:09 -07:00
Scott Lamb
56fde0d71b remove Bytes from public codec API
Part of #47

The main benefit is that `VideoFrame::into_data` can cheaply return a
`Vec<u8>` that the caller can mutate. In particular, they could convert
H.264 data from Annex B to AVC form or skip non-VCL NALs. Neither of
these transformations add bytes so they're both possible without
allocation.

Audio and message frames still use `Bytes` internally, as that allows
them to avoid copying when the frame is wholly contained in a packet.
I think this is much more common than for video. I didn't add an
`AudioFrame::into_data` or `VideoFrame::into_data`.
2022-05-11 10:43:58 -07:00
Scott Lamb
1b6491370f remove StreamContextRef type
Turns out it's not a problem to keep around a StreamContext, so let's
avoid the complexity of another public type (and another internal type).
2022-05-11 09:27:40 -07:00
Scott Lamb
8caa1d9ae3 rename ReceivedCompoundPacket::context -> ctx
The latter matches other types within Retina.
2022-05-11 08:29:23 -07:00
Scott Lamb
eecea0b474 update changelog for new msrv 2022-05-10 16:53:19 -07:00
Scott Lamb
6bc3b004a4 Merge branch 'main' into next 2022-05-10 16:52:58 -07:00
Scott Lamb
511e968733 bump minimum Rust to 1.59
27c5ed5 uses destructuring assignments, introduced in this version.
Should address this CI failure:
https://github.com/scottlamb/retina/actions/runs/2303800235
2022-05-10 16:03:33 -07:00
Scott Lamb
27c5ed5f04 expose RTCP compound packets
...and rename `PacketItem` variants to `Rtp` and `Rtcp` for brevity.

Fixes #59
2022-05-10 15:58:54 -07:00
Scott Lamb
06d7150989 fix inverted condition in mp4 bug
This caused it to say every video frame had new parameters.
2022-05-10 15:58:54 -07:00
Scott Lamb
2530014cce ignore unparseable rtptime values
https://github.com/scottlamb/moonfire-nvr/issues/224
2022-05-09 12:57:20 -07:00
Scott Lamb
2cc35d1733 shrink Presentation by a word 2022-04-30 16:16:08 -07:00
Scott Lamb
a5e198b0cf use accessors for fields in Stream
* and take advantage of it to use `Box<str>` rather than `String`
  in a couple places (saving a couple words)
* also rename clock_rate to clock_rate_hz for clarity
2022-04-30 12:26:27 -07:00
Scott Lamb
2bbc847754 replace new_parameters with has_new_parameters
As described in #47
2022-04-30 12:08:01 -07:00
Scott Lamb
efc02236d5 use accessors for most codec fields for #47
I left alone `VideoFrame::new_parameters`, as I'll likely eliminate it
as described in #47.
2022-04-30 11:40:28 -07:00
Scott Lamb
f94e2f78d3 fix typo in comment 2022-04-29 12:52:04 -07:00
Scott Lamb
2c8832d02b clippy 2022-04-28 22:31:31 -07:00
Scott Lamb
3b9c6b8719 bump minimum Rust version to 1.56
The last commit needs at least 1.53 for its use of array's IntoIterator
impl. We might as well bump up to 1.56 and take advantage of the 2021
edition.
2022-04-28 22:19:20 -07:00
Scott Lamb
d664f6b1af bump version 2022-04-28 16:14:09 -07:00
Scott Lamb
2e34bf927e revamp Packet type
As described in #47 and #58: revamp this type to keep the full raw
packet, and provide accessors rather than raw fields. It's also
smaller now, which is nice.
2022-04-28 16:13:05 -07:00
Scott Lamb
7ea09dde3c make item enums non_exhaustive 2022-04-28 16:13:05 -07:00
Scott Lamb
1646142322 take transport options at setup time 2022-04-28 16:13:05 -07:00
Scott Lamb
8744bf52d3 split PacketContext and StreamContext
As listed in #47.

This improves throughput in the client/h264 benchmark by about 20%,
I think because we copy fewer bytes around. CodecItem went from 256
bytes to 176.
2022-04-28 16:12:54 -07:00
Scott Lamb
1bbaf29dc9 setup should take a SetupOptions 2022-04-28 15:16:39 -07:00
Scott Lamb
7879414ff8 decruft interface 2022-04-28 15:16:39 -07:00
Scott Lamb
f335e6cbd4 remove deprecated methods 2022-04-28 15:16:39 -07:00
Scott Lamb
1ea14cbfaf fix roundtrip_h264 fuzz test bitrot
This broke with 6155d4eb.
2022-04-28 15:15:49 -07:00
Scott Lamb
1a36e4f252 fix broken doc links 2022-04-27 22:34:30 -07:00
Scott Lamb
9bc2c8eca5 fix typo in RTCP padding parsing
This was accidentally looking at the bottom bit of the V=2 field, so
it effectively never subtracted padding from the payload.

This bug didn't have any effect...yet. We currently only support
parsing the sender report. RFC 3550 says that SRs are sent
in "compound packets" that start with the SR and have at least one
other entry (a CNAME). Only the last packet within the compound packet
can have padding, so it's never come up in SR parsing. Fix this bug now
before we start parsing more things and run into trouble.
2022-04-27 22:23:55 -07:00
Scott Lamb
375754a88f cleanup: use LimitedHex in another spot 2022-04-13 20:07:28 -07:00
Scott Lamb
c58ac94fe4 CI: fix clippy flags 2022-04-12 14:24:35 -07:00
Scott Lamb
decab965a3 prepare v0.3.9 2022-04-12 14:19:24 -07:00
Scott Lamb
0bd76e1346 cargo fmt 2022-04-12 14:19:24 -07:00
Scott Lamb
70294f4641 improve debug logging on wrong ssrc
As described here:
https://github.com/scottlamb/moonfire-nvr/issues/209#issuecomment-1083307174
2022-04-12 14:14:58 -07:00
Scott Lamb
e358f0cd0c make clippy warnings fail on CI 2022-04-12 14:09:58 -07:00