構(gòu)造函數(shù)
public FFmpegFrameRecorder(String filename, int imageWidth, int imageHeight, int audioChannels)
指定文件名深碱、分辨率瞧剖、音頻通道數(shù)牛哺;初始化格式、編碼器俗孝、比特率、采樣率枫耳;分配AVPacket空間怨咪。
公共方法
public void start()
創(chuàng)建并設(shè)置編碼器屋剑、打開編碼器、申請必要的編碼緩存區(qū)诗眨。
public void record(Frame frame, int pixelFormat)
轉(zhuǎn)碼視頻并寫入文件/推流饼丘。
public boolean recordSamples(int sampleRate, int audioChannels, Buffer ... samples)
轉(zhuǎn)碼音頻并寫入文件/推流,如果不指定sampleRate辽话、audioChannels將由音頻編碼器決定。
public void stop()
flush所有buffer卫病。finally會執(zhí)行release()油啤。
public void release()
釋放所有資源,當(dāng)GC時會自動執(zhí)行蟀苛。
屬性:
private String filename;// 輸出文件名
private AVFrame picture, tmp_picture;// 存放編碼后的一幀圖片的byte[]及相關(guān)信息
private BytePointer picture_buf;// 一幀圖片的存儲區(qū)域
private AVFrame frame;// 存放編碼后的一幀音頻的byte[]及相關(guān)信息
private BytePointer video_outbuf;// 輸出視頻的存儲區(qū)域
private int video_outbuf_size;// 輸出視頻的存儲區(qū)域的大小
private BytePointer audio_outbuf;// 輸出音頻的存儲區(qū)域
private int audio_outbuf_size;// 輸出音頻的存儲區(qū)域的大小
private Pointer[] samples_in;
private BytePointer[] samples_out;
private PointerPointer samples_in_ptr;
private PointerPointer samples_out_ptr;
private int audio_input_frame_size;// 輸入音頻一幀的大小
private AVOutputFormat oformat;// 輸出視頻格式
private AVFormatContext oc;
private AVCodec video_codec, audio_codec;// 編碼器
private AVCodecContext video_c, audio_c;
private AVStream video_st, audio_st;// 流
private SwsContext img_convert_ctx;
private SwrContext samples_convert_ctx;
private int samples_channels, samples_format, samples_rate;
private AVPacket video_pkt, audio_pkt;
private int[] got_video_packet, got_audio_packet;