#ifndef HXVIDEOWRITER_H #define HXVIDEOWRITER_H #include #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