Problem
RFC 7798 §7.2 defines three H265-specific SDP fmtp attributes: sprop-vps, sprop-sps, sprop-pps. These carry the VPS/SPS/PPS parameter sets out-of-band in the SDP, exactly as H264 uses sprop-parametersets.
The live555-2013 MediaSubsession class only exposes fmtp_spropparametersets() (the H264 attribute). There are no accessors for the H265 equivalents, so Live555.cpp SetupSubsession passes NULL as the sprops for H265 streams.
Impact: cameras that do not inline VPS/SPS/PPS in every RTP stream (i.e., do not send them before the first IDR frame) will produce a black frame until the next keyframe. Cameras that inline them (like the Milesight MS-C5372 tested in #17) are unaffected.
Fix
- Add
fSpropVPS, fSpropSPS, fSpropPPS fields and accessors (fmtp_spropvps(), fmtp_spropsps(), fmtp_sproppps()) to libs/live555-2013.02.11/liveMedia/include/MediaSession.hh and populate them in the FMTP parser (MediaSession.cpp).
- In
Live555.cpp SetupSubsession, for H265 streams, concatenate sprop-vps, sprop-sps, sprop-pps and pass them as the sprops string to InitVideoSubsession.
Reference
Problem
RFC 7798 §7.2 defines three H265-specific SDP fmtp attributes:
sprop-vps,sprop-sps,sprop-pps. These carry the VPS/SPS/PPS parameter sets out-of-band in the SDP, exactly as H264 usessprop-parametersets.The live555-2013
MediaSubsessionclass only exposesfmtp_spropparametersets()(the H264 attribute). There are no accessors for the H265 equivalents, soLive555.cpp SetupSubsessionpassesNULLas the sprops for H265 streams.Impact: cameras that do not inline VPS/SPS/PPS in every RTP stream (i.e., do not send them before the first IDR frame) will produce a black frame until the next keyframe. Cameras that inline them (like the Milesight MS-C5372 tested in #17) are unaffected.
Fix
fSpropVPS,fSpropSPS,fSpropPPSfields and accessors (fmtp_spropvps(),fmtp_spropsps(),fmtp_sproppps()) tolibs/live555-2013.02.11/liveMedia/include/MediaSession.hhand populate them in the FMTP parser (MediaSession.cpp).Live555.cpp SetupSubsession, for H265 streams, concatenate sprop-vps, sprop-sps, sprop-pps and pass them as the sprops string toInitVideoSubsession.Reference
Live555.cpp SetupSubsessionwith TODO(H265: parse sprop-vps/sps/pps from SDP for cameras that don't inline parameter sets #20) comment.