diff --git a/pkg/codec/openh264/bridge.cpp b/pkg/codec/openh264/bridge.cpp index 885a7d5..82438dc 100644 --- a/pkg/codec/openh264/bridge.cpp +++ b/pkg/codec/openh264/bridge.cpp @@ -80,6 +80,11 @@ Slice enc_encode(Encoder *e, Frame f, int *eresult) { SFrameBSInfo info = {0}; Slice payload = {0}; + if(e->force_key_frame == 1) { + info.eFrameType = videoFrameTypeI; + e->force_key_frame = 0; + } + pic.iPicWidth = f.width; pic.iPicHeight = f.height; pic.iColorFormat = videoFormatI420; diff --git a/pkg/codec/openh264/bridge.hpp b/pkg/codec/openh264/bridge.hpp index 9f1be01..874f06e 100644 --- a/pkg/codec/openh264/bridge.hpp +++ b/pkg/codec/openh264/bridge.hpp @@ -27,6 +27,7 @@ typedef struct Encoder { ISVCEncoder *engine; unsigned char *buff; int buff_size; + int force_key_frame; } Encoder; Encoder *enc_new(const EncoderOptions params, int *eresult); diff --git a/pkg/codec/openh264/openh264.go b/pkg/codec/openh264/openh264.go index 184a527..34deafd 100644 --- a/pkg/codec/openh264/openh264.go +++ b/pkg/codec/openh264/openh264.go @@ -84,7 +84,8 @@ func (e *encoder) SetBitRate(b int) error { } func (e *encoder) ForceKeyFrame() error { - panic("ForceKeyFrame is not implemented") + e.engine.force_key_frame = C.int(1) + return nil } func (e *encoder) Close() error {