diff --git a/src/media/audio/decode/audio_decoder.h b/src/media/audio/decode/audio_decoder.h index 0ac7ea9..9f6e21d 100644 --- a/src/media/audio/decode/audio_decoder.h +++ b/src/media/audio/decode/audio_decoder.h @@ -25,9 +25,12 @@ class AudioDecoder { public: int Init(); + int Decode(const uint8_t *data, int size, std::function on_receive_decoded_frame); + std::string GetDecoderName() { return "Opus"; } + private: /* data */ OpusDecoder *opus_decoder_ = nullptr; diff --git a/src/media/audio/encode/audio_encoder.h b/src/media/audio/encode/audio_encoder.h index e24d593..718074b 100644 --- a/src/media/audio/encode/audio_encoder.h +++ b/src/media/audio/encode/audio_encoder.h @@ -22,11 +22,15 @@ class AudioEncoder { public: int Init(); + int Encode(const uint8_t* data, int size, std::function on_encoded_audio_buffer); + int OnEncodedAudioBuffer(char* encoded_audio_buffer, size_t size); + std::string GetEncoderName() { return "Opus"; } + private: OpusEncoder* opus_encoder_ = nullptr; int sample_rate_ = 48000; diff --git a/src/media/video/decode/dav1d/dav1d_av1_decoder.h b/src/media/video/decode/dav1d/dav1d_av1_decoder.h index fa71115..e32a4cc 100644 --- a/src/media/video/decode/dav1d/dav1d_av1_decoder.h +++ b/src/media/video/decode/dav1d/dav1d_av1_decoder.h @@ -19,9 +19,12 @@ class Dav1dAv1Decoder : public VideoDecoder { public: int Init(); + int Decode(const uint8_t *data, int size, std::function on_receive_decoded_frame); + std::string GetDecoderName() { return "Dav1dAv1"; } + private: VideoFrame *nv12_frame_ = 0; int nv12_frame_capacity_ = 0; diff --git a/src/media/video/decode/nvcodec/nvidia_video_decoder.h b/src/media/video/decode/nvcodec/nvidia_video_decoder.h index 29a0d36..a99affe 100644 --- a/src/media/video/decode/nvcodec/nvidia_video_decoder.h +++ b/src/media/video/decode/nvcodec/nvidia_video_decoder.h @@ -13,9 +13,12 @@ class NvidiaVideoDecoder : public VideoDecoder { public: int Init(); + int Decode(const uint8_t* data, int size, std::function on_receive_decoded_frame); + std::string GetDecoderName() { return "NvidiaH264"; } + private: NvDecoder* decoder = nullptr; bool get_first_keyframe_ = false; diff --git a/src/media/video/decode/openh264/openh264_decoder.h b/src/media/video/decode/openh264/openh264_decoder.h index 14a3bed..a979113 100644 --- a/src/media/video/decode/openh264/openh264_decoder.h +++ b/src/media/video/decode/openh264/openh264_decoder.h @@ -23,9 +23,12 @@ class OpenH264Decoder : public VideoDecoder { public: int Init(); + int Decode(const uint8_t* data, int size, std::function on_receive_decoded_frame); + std::string GetDecoderName() { return "OpenH264"; } + private: ISVCDecoder* openh264_decoder_ = nullptr; bool get_first_keyframe_ = false; diff --git a/src/media/video/decode/video_decoder.h b/src/media/video/decode/video_decoder.h index 235c328..7b5fce6 100644 --- a/src/media/video/decode/video_decoder.h +++ b/src/media/video/decode/video_decoder.h @@ -11,15 +11,20 @@ #include #include #include +#include #include "video_frame.h" class VideoDecoder { public: virtual int Init() = 0; + virtual int Decode( const uint8_t *data, int size, std::function on_receive_decoded_frame) = 0; + + virtual std::string GetDecoderName() = 0; + VideoDecoder() = default; virtual ~VideoDecoder() {} }; diff --git a/src/media/video/encode/aom/aom_av1_encoder.h b/src/media/video/encode/aom/aom_av1_encoder.h index c4aaa52..226114d 100644 --- a/src/media/video/encode/aom/aom_av1_encoder.h +++ b/src/media/video/encode/aom/aom_av1_encoder.h @@ -52,6 +52,8 @@ class AomAv1Encoder : public VideoEncoder { int ForceIdr(); + std::string GetEncoderName() { return "AomAV1"; } + private: template bool SetEncoderControlParameters(int param_id, P param_value); diff --git a/src/media/video/encode/nvcodec/nvidia_video_encoder.h b/src/media/video/encode/nvcodec/nvidia_video_encoder.h index 4266abb..cc9e82f 100644 --- a/src/media/video/encode/nvcodec/nvidia_video_encoder.h +++ b/src/media/video/encode/nvcodec/nvidia_video_encoder.h @@ -28,6 +28,8 @@ class NvidiaVideoEncoder : public VideoEncoder { int ForceIdr(); + std::string GetEncoderName() { return "NvidiaH264"; } + private: int ResetEncodeResolution(unsigned int width, unsigned int height); diff --git a/src/media/video/encode/openh264/openh264_encoder.h b/src/media/video/encode/openh264/openh264_encoder.h index bb0450f..72a52d4 100644 --- a/src/media/video/encode/openh264/openh264_encoder.h +++ b/src/media/video/encode/openh264/openh264_encoder.h @@ -39,6 +39,8 @@ class OpenH264Encoder : public VideoEncoder { int ForceIdr(); + std::string GetEncoderName() { return "OpenH264"; } + private: int InitEncoderParams(int width, int height); int ResetEncodeResolution(unsigned int width, unsigned int height); diff --git a/src/media/video/encode/video_encoder.h b/src/media/video/encode/video_encoder.h index fef171a..8d451ff 100644 --- a/src/media/video/encode/video_encoder.h +++ b/src/media/video/encode/video_encoder.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "x.h" @@ -18,6 +19,7 @@ class VideoEncoder { public: virtual int Init() = 0; + virtual int Encode(const uint8_t* pData, int nSize, std::function @@ -29,8 +31,11 @@ class VideoEncoder { on_encoded_image) = 0; virtual int OnEncodedImage(char* encoded_packets, size_t size) = 0; + virtual int ForceIdr() = 0; + virtual std::string GetEncoderName() = 0; + VideoEncoder() = default; virtual ~VideoEncoder() {} }; diff --git a/src/pc/peer_connection.cpp b/src/pc/peer_connection.cpp index 7ce2431..30769f6 100644 --- a/src/pc/peer_connection.cpp +++ b/src/pc/peer_connection.cpp @@ -320,6 +320,9 @@ int PeerConnection::CreateVideoCodec(bool av1, bool hardware_acceleration) { } video_codec_inited_ = true; + LOG_INFO("Create video codec [{}|{}] finish", + video_encoder_->GetEncoderName(), video_decoder_->GetDecoderName()); + return 0; } @@ -341,6 +344,9 @@ int PeerConnection::CreateAudioCodec() { } audio_codec_inited_ = true; + LOG_INFO("Create audio codec [{}|{}] finish", + audio_encoder_->GetEncoderName(), audio_decoder_->GetDecoderName()); + return 0; }