ffmpeg解码音视频同步

#include 
#include 
#include 
#include 
#include 
#define __STDC_CONSTANT_MACROS

extern "C" {
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "libavformat/avformat.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
};
#define SDL_AUDIO_BUFFER_SIZE 1024
#define MAX_AUDIO_FRAME_SIZE 192000 //channels(2) * data_size(2) * sample_rate(48000)

#define MAX_AUDIOQ_SIZE (5 * 16 * 1024)
#define MAX_VIDEOQ_SIZE (5 * 256 * 1024)

#define AV_SYNC_THRESHOLD 0.01
#define AV_NOSYNC_THRESHOLD 10.0

#define FF_REFRESH_EVENT (SDL_USEREVENT)
#define FF_QUIT_EVENT (SDL_USEREVENT + 1)

#define VIDEO_PICTURE_QUEUE_SIZE 1

//DWORD dwStart;
// 解复用后音视频packet保存队列
typedef struct PacketQueue {
    AVPacketList* first_pkt, * last_pkt;
    int nb_packets;
    int size;
    SDL_mutex* mutex;
    SDL_cond* cond;
} PacketQueue;

// 解码后视频帧
typedef struct VideoPicture {
    AVFrame* frame;
    int width, height; /* source height & width */
    double pts;
} VideoPicture;

//播放器的参数
typedef struct VideoState {

    //multi-media file
    char filename[1024]; // 文件名称
    AVFormatContext* pFormatCtx;// 上下文
    int videoStream, audioStream;//音视频流index

    // 同步相关
    double audio_clock;
    double frame_timer;
    double frame_last_pts;
    double frame_last_delay;

    double video_clock; ///
    double video_current_pts; ///
    int64_t video_current_pts_time;  ///

你可能感兴趣的:(FFmpeg学习,ffmpeg)