107 lines
3.4 KiB
C++
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
|