When recording HEVC streams to MP4, DVR fails with error "doesn't support hvcC change" (ERROR_MP4_HVCC_CHANGE). The root cause is in video_avc_demux(): the SrsVideoFrame object is reused across frames, and its initialize() method does not reset avc_packet_type. When a sequence header is processed, avc_packet_type is set to 0 (SrsVideoAvcFrameTraitSequenceHeader). When the next video info frame arrives (which only appears in HEVC streams), the function returns early without assigning video->avc_packet_type, so it retains the value 0 from the previous sequence header frame. When DVR processes this video info frame, it checks avc_packet_type and incorrectly identifies it as a sequence header. Since the real HEVC sequence header was already recorded, DVR returns the "hvcC change" error. The fix assigns video->avc_packet_type = packet_type before returning early for VideoInfoFrame. After the fix, avc_packet_type is correctly set to the actual packet type (1 or 3 for coded frames), so DVR correctly identifies it as NOT a sequence header. --------- Co-authored-by: OSSRS-AI <winlinam@gmail.com> |
||
|---|---|---|
| .. | ||
| 3rdparty | ||
| auto | ||
| cmake | ||
| conf | ||
| doc | ||
| etc/init.d | ||
| gdb | ||
| packaging/redhat | ||
| research | ||
| scripts | ||
| src | ||
| usr/lib/systemd/system | ||
| .gitignore | ||
| AUTHORS.md | ||
| AUTHORS.txt | ||
| configure | ||
| Dockerfile.builds | ||
| Dockerfile.cov | ||
| Dockerfile.pkg | ||
| Dockerfile.test | ||