资源简介

基于FFMPEG_SDL2_音视频播放_参考音频时钟,在vs2010上测试ok,是博文《基于FFMPEG+SDL2播放video---音视频同步(参考音频时钟)》中的代码,博文链接:https://blog.csdn.net/u011003120/article/details/82626615

资源截图

代码片段和文件信息

#if 0
#else
#include 
#include 

#define __STDC_CONSTANT_MACROS
extern “C“
{
#include “libavcodec/avcodec.h“
#include “libavformat/avformat.h“
#include “libswscale/swscale.h“
#include “libswresample/swresample.h“
#include “libavutil/time.h“
#include “sdl/SDL.h“
#include “sdl/SDL_thread.h“
};

#define FILENAME “屌丝男士.mov“


#define VIDEO_PICTURE_QUEUE_SIZE       1
#define SDL_AUDIO_BUFFER_SIZE             1024
#define MAX_AUDIO_frame_SIZE              192000
#define MAX_AUDIOQ_SIZE                         (5 * 16 * 1024)
#define MAX_VIDEOQ_SIZE                          (5 * 256 * 1024)

#define FF_REFRESH_EVENT                         (SDL_USEREVENT + 1)
#define FF_QUIT_EVENT                                (SDL_USEREVENT + 2)
#define FF_ALLOC_EVENT                             (SDL_USEREVENT+3)

#define AV_SYNC_THRESHOLD                      0.01
#define AV_NOSYNC_THRESHOLD                 10.0

typedef struct PacketQueue 
{
    AVPacketList *first_pkt *last_pkt;
    int nb_packets;
    int size;
    SDL_mutex *mutex;
    SDL_cond *cond;
} PacketQueue;

typedef struct _VideoPicture_
{
AVframe* pframe;
double pts;
int frameWidth;
int frameHeight;
int allocated;
}VideoPicture;

typedef struct _VideoState_
{
AVFormatContext *pFormatCtx;

/* video */
int videoStreamIndex;
AVStream* pVideoStream;
PacketQueue videoQueue;
VideoPicture pictQueue[VIDEO_PICTURE_QUEUE_SIZE];
int pictSize;
int pictRindex;                          //取出索引
int pictWindex;                         //写入索引
double videoClock;
double frameLastDelay;          //两帧PTS之间的差值
double frameLastPTS;             //上一帧的PTS
double frameTimer;                //什么作用?

/* audio */
int audioStreamIndex;
AVStream* pAudioStream;
PacketQueue audioQueue;
uint8_t audioBuf[(MAX_AUDIO_frame_SIZE * 3) / 2];
unsigned int audioBufSize;
unsigned int audioBufIndex;
AVframe audioframe;
AVPacket audioPkt;
uint8_t *audioPktData;
int audioPktSize;
int outBufferSize;
struct SwrContext *au_convert_ctx;
double audioClock;

/* sdl */
SDL_mutex *pictQueueMutex;
SDL_cond *pictQueueCond;
SDL_Thread *videoThrd;
SDL_Thread *parseThrd;

char fileName[128];
int quit;
int flag;

struct SwsContext *sws_ctx;
}VideoState;

VideoState *global_video_state;

void packet_queue_init(PacketQueue *q) 
{
    memset(q 0 sizeof(PacketQueue));
    q->mutex = SDL_CreateMutex();
    q->cond = SDL_CreateCond();
}

int packet_queue_put(PacketQueue *q AVPacket *pkt) {
    AVPacketList *pkt1;

    if(av_dup_packet(pkt) < 0) {
        return -1;
    }

    pkt1 = (AVPacketList *)av_malloc(sizeof(AVPacketList));
    if (!pkt1)
        return -1;

    pkt1->pkt = *pkt;
    pkt1->next = NULL;

    SDL_LockMutex(q->mutex);

    if (!q->last_pkt)    //队列为空
        q->first_pkt = pkt1;
    else
        q->last_pkt->next = pkt1;  //将当前链表的最后一个结点的next指向pkt1

  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-09-10 15:20  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\
     文件    18936320  2018-08-27 18:38  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\avcodec-55.dll
     文件     1340928  2018-08-27 18:30  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\avdevice-55.dll
     文件     2034688  2018-08-27 18:30  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\avfilter-4.dll
     文件     5342720  2018-08-27 18:33  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\avformat-55.dll
     文件      418304  2018-08-27 18:30  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\avutil-52.dll
     目录           0  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\
     文件         866  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\cl.command.1.tlog
     文件       17752  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\CL.read.1.tlog
     文件         584  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\CL.write.1.tlog
     文件        5248  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.Build.CppClean.log
     文件       43008  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.exe
     文件         658  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.exe.embed.manifest
     文件         724  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.exe.embed.manifest.res
     文件         616  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.exe.intermediate.manifest
     文件      461344  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.ilk
     文件          94  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.lastbuildstate
     文件      560128  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.pdb
     文件         266  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test_manifest.rc
     文件       58350  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL_Play_Video_Audio.obj
     文件           2  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link-cvtres.read.1.tlog
     文件           2  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link-cvtres.write.1.tlog
     文件           2  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link.9948-cvtres.read.1.tlog
     文件           2  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link.9948-cvtres.write.1.tlog
     文件           2  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link.9948.read.1.tlog
     文件           2  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link.9948.write.1.tlog
     文件        2802  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link.command.1.tlog
     文件        5290  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link.read.1.tlog
     文件        1466  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\link.write.1.tlog
     文件         622  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\mt.command.1.tlog
     文件         350  2018-09-10 15:19  FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\mt.read.1.tlog
............此处省略196个文件信息

评论

共有 条评论