Repository navigation
Conversation
0002 adds libavformat/rtpdec_svac3.c, registered for SVAC3/90000: the payload format OpenIPC cameras send, RFC 7798's shape on SVAC3's two-byte NAL header (single NAL unit packets, fragmentation units of type 28), with sprop-sps/sprop-pps from the SDP as extradata. CI applies the patches in order, builds FFmpeg with the RTP/RTSP demuxers, and holds every corpus stream sent through local UDP to the same golden framemd5 as the raw demuxer, at 1200 bytes and at 300 so every patch is fragmented.
PR Summary by QodoAdd SVAC 3.0 RTP/RTSP reception and end-to-end checks
AI Description
Diagram
High-Level Assessment
Files changed (5)
|
Code Review by Qodo
1.
|
- sprop-sps and sprop-pps on fmtp lines of their own: the first line's set was committed and freed before the second arrived, so the decoder had only one. Both are kept until close and the extradata rebuilt from both on every line. CI now sends them that way, with the first access unit's in-band sets removed so the first picture depends on the SDP; the old depacketizer loses the first GOP there (30 of 40 pictures). - rtp_send.py groups access units by the parser's rule (ff_svac3_nal_starts_au after a patch), so timestamps and markers follow the pictures; the unit count equals the golden picture count on every corpus stream. - rtp_check.sh fails instead of hanging when the sender dies, or does not write its SDP within ten seconds.
|
Review addressed in 684cbe4.
|
Why
FFmpeg can decode an SVAC 3.0 file with 0001, but not a camera's live stream. The SVAC 3.0 draft defines a byte stream and no RTP mapping. OpenIPC cameras stream SVAC 3.0 over RTSP in a mapping modelled on RFC 7798, and this reads it, so
ffplay rtsp://camera/stream=0plays them.What
ffmpeg/0002-avformat-rtpdec-add-an-RTP-depacketizer-for-SVAC-3.0.patchaddslibavformat/rtpdec_svac3.c, registered forSVAC3/90000:layer_idandtemporal_idare kept.S|E|R|FuType(5)header, then a fragment of the bytes after the two-byte header.ff_h264_handle_frag_packetwith the rebuilt header.sprop-sps/sprop-ppsinfmtpbecome Annex-B extradata, which the 0001 wrapper already feeds to the decoder.CI
ffmpeg/0*.patchin order, each checked against the tree the previous ones made.sdp,rtspandrtpdemuxers and theudp,rtpandtcpprotocols.ffmpeg/rtp_check.shsends every corpus stream as RTP over local UDP withffmpeg/rtp_send.py, an independent packetiser of the same format. FFmpeg receives it through an SDP, and the result is held to the same golden framemd5 as the raw demuxer.ffmpeg/README.mddocuments the mapping.Verified
ffmpeg -rtsp_transport tcp -i rtsp://…/stream=0 -f framemd5decodes 1080p with no warnings, one packet per picture.n9.0.2checkout.The MPEG-PS (GB/T 28181,
stream_type0x80) mapping will come separately.