资源简介
基于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.em
文件 724 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\FFMPEG_SDL2_Play_Video_Audio_Sync_Test.exe.em
文件 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\li
文件 2 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\li
文件 2 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\li
文件 2 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\li
文件 2 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\li
文件 2 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\li
文件 2802 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\li
文件 5290 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\li
文件 1466 2018-09-10 15:19 FFMPEG_SDL2_Play_Video_Audio_Sync_Test\Debug\li
文件 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个文件信息
- 上一篇:破壳web后台扫描器
- 下一篇:2018revit二次开发论文参考
相关资源
- ffmpeg-3.2-win32-shared.zip
- ffmpeg录音
- ffmpeg资料全
- ffmpeg_windows屏幕录制并编码成H264
- windows32位系统的ffmpeg
- 利用ffmpeg提取任意格式视频帧关键帧
- ffmpeg3.0源码
- FFmpeg解码+SDL播放
- ffmpeg封装H264成MP4、AVI视频格式,及提
- 从零开始学习音视频编程技术十二 录
- AudioResample
- 最简单的基于FFmpeg的libswscale的教程
- ffmpeg-2.5.2-win32-shared
- 利用FFmpeg将mkv视频转换为H.264
- G-code-Interpreter,G代码解释器
- 安卓交叉编译ffmepgx86_64版本
- ffmepg的安卓arm(armeabi-v7a)版本
- 基于ARM9的远程视频监控系统
- 最简单的基于FFmpeg的封装格式转换器
- SDK播放器加速.zip
- 基于ffmpeg的经典版 ffplay 音视频播放
- ffmpeg api实现视频转码音视频
- 三款主题VS2010
- VS2010黑色主题Dark主题
- FFMPEG入门基础资料pdf
- Visual Assist X VA_X插件及破解工具,适用
- ffmpeg ffdoc (FFMPEG的最完整教程)
- TabControl用法图解VS2010
- Midas to FLAC3D-vs2010
- ffmpeg转码为hls代码
评论
共有 条评论