Skip to content

add NACK, RTX, DTLS active support #59

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 20 commits into
base: workflows
Choose a base branch
from

Conversation

JackLau1222
Copy link
Collaborator

No description provided.

@JackLau1222 JackLau1222 force-pushed the whip_latest branch 2 times, most recently from 5982042 to 4d12ed5 Compare July 22, 2025 04:56
@JackLau1222 JackLau1222 force-pushed the whip_latest branch 5 times, most recently from a4c0f1f to 7652d4a Compare July 26, 2025 12:18
@JackLau1222 JackLau1222 force-pushed the workflows branch 2 times, most recently from 2c40a5c to 80db6eb Compare August 6, 2025 11:35
JackLau1222 and others added 5 commits August 7, 2025 11:10
mark this ignore_ipv6 flag could ignore any IPv6 ICE candidate,
preventing “No route to host” errors on devices without IPv6 connectivity.

Signed-off-by: Jack Lau <[email protected]>
Remove redundant "WHIP: " prefix in log context
since it already add whip context.

Fix grammers in whip options descriptions

Signed-off-by: Jack Lau <[email protected]>
AVCodecParameters::profile only contains constraint_set1_flag
(AV_PROFILE_H264_CONSTRAINED 1<<9).
So add H264 constraints flag fully parse refer to hlsenc
write_codec_attr

Signed-off-by: Jack Lau <[email protected]>
JackLau1222 and others added 10 commits August 7, 2025 11:20
RTP retransmission described in RFC4588 (RTX) is an effective packet
loss recovery technique for real-time applications with relaxed delay bounds.

This patch provides a minimal implementation for RTX and RTCP NACK (RFC3940)
and its associated SDP signaling and negotiation.

Co-authored-by: Sergio Garcia Murillo <[email protected]>
Signed-off-by: Jack Lau <[email protected]>
limit the generated ssrc to 31 bit to avoid overflow risk when pass
it to rtpenc as signed int.

Signed-off-by: Jack Lau <[email protected]>
add dtls_active flag to specify the dtls role

properly set the send key and recv key depends on DTLS role

As DTLS server, the recv key is client master key plus salt,
the send key is server master key plus salt.
As DTLS client, the recv key is server master key plus salt,
the send key is client master key plus salt.

Signed-off-by: Jack Lau <[email protected]>
This patch aims to simplify the dtls handshake process
since dtls handshake use force block mode

We can just use the return code instead of DTLSState enum

Signed-off-by: Jack Lau <[email protected]>
See RFC 5245 Section 4.3:
If an agent is a lite implementation, it MUST include an "a=ice-lite"
session-level attribute in its SDP.  If an agent is a full
implementation, it MUST NOT include this attribute.

Signed-off-by: Jack Lau <[email protected]>
This value is only useful when dtls handshake is NONBLOCK mode,
dtls handshake just need to call ffurl_handshake once since it
force block mode.

Signed-off-by: Jack Lau <[email protected]>
We try to perform dtls handshake when the ICE is totally done.

Refer to RFC8445,
When peer's ICE is lite, the peer won't trigged check so FFmpeg just send
STUN request and receive response, then ICE is done.
When peer's ICE is full, the peer will send STUN request after reponse
FFmpeg's request to ensure candidate pair become valid in both directions.
Then the peer does nomination, and ICE is done.

Signed-off-by: Jack Lau <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants