兼容某些多帧粘合在一起的流

This commit is contained in:
xiongziliang 2020-09-12 19:06:26 +08:00
parent c711eedaa7
commit aff9963f95

View File

@ -35,6 +35,7 @@ public:
NAL_SPS = 7, NAL_SPS = 7,
NAL_PPS = 8, NAL_PPS = 8,
NAL_AUD = 9, NAL_AUD = 9,
NAL_B_P = 1,
} NalType; } NalType;
H264Frame(){ H264Frame(){
@ -180,9 +181,8 @@ public:
*/ */
void inputFrame(const Frame::Ptr &frame) override{ void inputFrame(const Frame::Ptr &frame) override{
int type = H264_TYPE(*((uint8_t *)frame->data() + frame->prefixSize())); int type = H264_TYPE(*((uint8_t *)frame->data() + frame->prefixSize()));
if(type == H264Frame::NAL_SPS || type == H264Frame::NAL_PPS || type == H264Frame::NAL_SEI || if(type != H264Frame::NAL_B_P && type != H264Frame::NAL_IDR){
type == H264Frame::NAL_AUD){ //非I/B/P帧情况下split一下防止多个帧粘合在一起
//有些设备会把SPS PPS IDR帧当做一个帧打包所以我们要split一下
splitH264(frame->data(), frame->size(), frame->prefixSize(), [&](const char *ptr, int len, int prefix) { splitH264(frame->data(), frame->size(), frame->prefixSize(), [&](const char *ptr, int len, int prefix) {
H264FrameInternal::Ptr sub_frame = std::make_shared<H264FrameInternal>(frame, (char *)ptr, len, prefix); H264FrameInternal::Ptr sub_frame = std::make_shared<H264FrameInternal>(frame, (char *)ptr, len, prefix);
inputFrame_l(sub_frame); inputFrame_l(sub_frame);
@ -332,4 +332,4 @@ private:
}; };
}//namespace mediakit }//namespace mediakit
#endif //ZLMEDIAKIT_H264_H #endif //ZLMEDIAKIT_H264_H