HxNvr/HxRtspBase/HxVideoWriter.h
2024-04-17 15:31:43 +08:00

107 lines
3.4 KiB
C++

#ifndef HXVIDEOWRITER_H
#define HXVIDEOWRITER_H
#include <HxTrace.h>
#include "HxVideoFrame.h"
class HxVideoWriter
{
public:
HxVideoWriter();
void open(AVFormatContext *ifmt_ctx, QString filename);
void send(AVPacket *packet);
void close();
static int get_video_duration(QString path);
public:
bool open_status;
QString error;
private:
int video_index, audio_index;
int video_frame_index, audio_frame_index;
long long video_pts, video_dts, audio_pts, audio_dts;
AVFormatContext *ofmt_ctx;
AVStream *video_dec_stream, *audio_dec_stream;
};
//class HxVideoWriter
//{
//public:
// HxVideoWriter();
// QString getError();
// void setEncodingParameters(QString audio_id,
// int audio_channel,
// int audio_bit_rate,
// int audio_sample_rate,
// QString video_id,
// QString video_profile,
// int video_width,
// int video_height,
// int video_fps,
// int video_bit_rate,
// int video_i_interval);
// bool openStream(AVFormatContext *pFormatCtx, QString filename);
// void sendStream(AVPacket *packet);
// void closeStream();
// bool getIsOpen();
//private:
// int open_decoder(AVFormatContext** ic, AVCodecContext** pInCodecCtx, int index);
// AVStream* add_video_stream(AVFormatContext* oc, AVCodecContext** pOutCodecCtx, AVFormatContext* ic, int index);
// AVStream* add_audio_stream(AVFormatContext* oc, AVCodecContext** pOutCodecCtx, AVFormatContext* ic, int index);
// int audio_resampler(AVCodecContext *input_codec_context,AVCodecContext *output_codec_context,AVFrame *input_frame,AVAudioFifo *fifo_buffer);
// int init_converted_samples(uint8_t ***converted_input_samples,AVCodecContext *output_codec_context,int frame_size);
// int convert_samples(const uint8_t **input_data,uint8_t **converted_data, const int frame_size,SwrContext *resample_context);
// int add_samples_to_fifo(AVAudioFifo *fifo,uint8_t **converted_input_samples,const int frame_size);
// int load_encode_and_write_audio(AVAudioFifo *fifo, AVFormatContext *oc, AVStream *audio_st, AVCodecContext *out_codec_ctx, int index);
// int init_output_frame(AVFrame **frame,AVCodecContext *output_codec_context,int frame_size);
// int encode_audio_frame_rtsp(AVFrame *frame,AVFormatContext *oc,AVStream *audio_st,AVCodecContext *out_codec_ctx,int index);
// void close();
//private:
// QString audio_id;
// int audio_channel;
// int audio_bit_rate;
// int audio_sample_rate;
// QString video_id;
// QString video_profile;
// int video_width;
// int video_height;
// int video_fps;
// int video_bit_rate;
// int video_i_interval;
// QString error;
// bool isOpen;
// AVFormatContext *ofmt_ctx;
// AVCodecContext *video_dec_ctx, *audio_dec_ctx;
// AVCodecContext *video_enc_ctx, *audio_enc_ctx;
// AVStream *video_dec_stream, *audio_dec_stream;
// AVStream *video_enc_stream, *audio_enc_stream;
// AVFrame *frame;
// AVAudioFifo *fifo;
// AVPacket *video_enc_packet;
// int output_frame_size;
// int video_index, audio_index;
// int video_frame_index;
// int _video_frame_index;
// int audio_frame_index;
//};
#endif // HXVIDEOWRITER_H