我使用live555编写了一个简单的rtsp服务器。我从这里获取了大部分代码Live555:基于“testOnDemandRTSPServer”的X264 Stream Live源
当新客户端连接时,它开始接收当前来自编码器的数据包。这可以是 P 帧和 I 帧。如何确保连接后客户端仅开始从 I 帧接收数据?
您可以根据您的要求检查最终单元类型,我认为 DeliverFrame 会很好,我不检查整个代码,但最终单元有有关框架类型的信息。
void LiveSourceWithx264::deliverFrame()
{
if(!isCurrentlyAwaitingData() || nalQueue.empty()) return;
x264_nal_t nal = nalQueue.front();
// Extract the NAL unit type
int nalType = nal.p_payload[4] & 0x1F; // Assuming 4-byte start code
// Check if we're looking for the first I-frame
if (firstFrame && nalType != 5) {
nalQueue.pop(); // Discard non-I-frames at the beginning
return; // Skip until we find an I-frame
}
firstFrame = false; // Reset flag after finding the first I-frame
// Existing logic to handle frame delivery
nalQueue.pop();
...
}