update plugins/publish/publish_node.cpp
This commit is contained in:
parent
206b2d3471
commit
ff3c00be9b
@ -405,7 +405,28 @@ public:
|
||||
auto* pos = static_cast<uint8_t*>(mpp_packet_get_pos(packet));
|
||||
size_t len = mpp_packet_get_length(packet);
|
||||
out.data.assign(pos, pos + len);
|
||||
out.key = (mpp_packet_get_flag(packet) & 0x10) != 0; // INTRA flag
|
||||
// MPP_PACKET_FLAG_INTRA = 0x08, also check NAL type for H264 IDR (type 5)
|
||||
RK_U32 flag = mpp_packet_get_flag(packet);
|
||||
out.key = (flag & 0x08) != 0; // MPP_PACKET_FLAG_INTRA
|
||||
// Fallback: check H264 NAL unit type if MPP flag not set
|
||||
if (!out.key && len >= 5) {
|
||||
// Find NAL start code and check type
|
||||
for (size_t i = 0; i + 4 < len; ++i) {
|
||||
if (pos[i] == 0 && pos[i+1] == 0 && pos[i+2] == 0 && pos[i+3] == 1) {
|
||||
uint8_t nal_type = pos[i+4] & 0x1F;
|
||||
if (nal_type == 5 || nal_type == 7) { // IDR or SPS
|
||||
out.key = true;
|
||||
break;
|
||||
}
|
||||
} else if (pos[i] == 0 && pos[i+1] == 0 && pos[i+2] == 1) {
|
||||
uint8_t nal_type = pos[i+3] & 0x1F;
|
||||
if (nal_type == 5 || nal_type == 7) {
|
||||
out.key = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
int64_t mpp_pts = mpp_packet_get_pts(packet);
|
||||
// Use encoder's pts if valid, otherwise compute from frame count
|
||||
out.pts_ms = mpp_pts > 0 ? mpp_pts : static_cast<int64_t>(frame_count_ * 1000 / fps_);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user