drop SEI and AUD for h264 and h265 avoid sei as a frame
This commit is contained in:
parent
a6e9652da8
commit
2335043cdf
|
|
@ -244,8 +244,33 @@ void FrameMerger::doMerge(BufferLikeString &merged, const Frame::Ptr &frame) con
|
||||||
default: /*不可达*/ assert(0); break;
|
default: /*不可达*/ assert(0); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bool FrameMerger::shouldDrop(const Frame::Ptr &frame) const{
|
||||||
|
switch (frame->getCodecId()) {
|
||||||
|
case CodecH264:{
|
||||||
|
auto type = H264_TYPE(frame->data()[frame->prefixSize()]);
|
||||||
|
if(type == H264Frame::NAL_SEI || type == H264Frame::NAL_AUD){
|
||||||
|
// 防止吧AUD或者SEI当成一帧
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CodecH265: {
|
||||||
|
//如果是新的一帧,前面的缓存需要输出
|
||||||
|
auto type = H265_TYPE(frame->data()[frame->prefixSize()]);
|
||||||
|
if(type == H265Frame::NAL_AUD || type == H265Frame::NAL_SEI_PREFIX || type == H265Frame::NAL_SEI_SUFFIX){
|
||||||
|
// 防止吧AUD或者SEI当成一帧
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
void FrameMerger::inputFrame(const Frame::Ptr &frame, const onOutput &cb) {
|
void FrameMerger::inputFrame(const Frame::Ptr &frame, const onOutput &cb) {
|
||||||
|
if(shouldDrop(frame)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (willFlush(frame)) {
|
if (willFlush(frame)) {
|
||||||
Frame::Ptr back = _frameCached.back();
|
Frame::Ptr back = _frameCached.back();
|
||||||
Buffer::Ptr merged_frame = back;
|
Buffer::Ptr merged_frame = back;
|
||||||
|
|
|
||||||
|
|
@ -475,6 +475,7 @@ public:
|
||||||
private:
|
private:
|
||||||
bool willFlush(const Frame::Ptr &frame) const;
|
bool willFlush(const Frame::Ptr &frame) const;
|
||||||
void doMerge(BufferLikeString &buffer, const Frame::Ptr &frame) const;
|
void doMerge(BufferLikeString &buffer, const Frame::Ptr &frame) const;
|
||||||
|
bool shouldDrop(const Frame::Ptr &frame) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _type;
|
int _type;
|
||||||
|
|
|
||||||
|
|
@ -165,8 +165,8 @@ void H265RtmpEncoder::inputFrame(const Frame::Ptr &frame) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type == H265Frame::NAL_SEI_PREFIX || type == H265Frame::NAL_SEI_SUFFIX){
|
if(type == H265Frame::NAL_SEI_PREFIX || type == H265Frame::NAL_SEI_SUFFIX || type == H265Frame::NAL_AUD){
|
||||||
return;
|
return;// 防止sei aud 作为一帧
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_lastPacket && (_lastPacket->time_stamp != frame->dts() || (type >=H264Frame::NAL_B_P && type<=H264Frame::NAL_IDR && (pcData[2]>>7 &0x01) !=0))) {
|
if (_lastPacket && (_lastPacket->time_stamp != frame->dts() || (type >=H264Frame::NAL_B_P && type<=H264Frame::NAL_IDR && (pcData[2]>>7 &0x01) !=0))) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue