资源简介
环境:Vs2010
参考网址:http://blog.csdn.net/cffishappy/article/details/7352898
鉴于ffplay的代码晦涩难懂 结合ffplay的代码 自己实现了一个ffplay 比较精简和通俗易懂
未解决的问题:
1、停止后会有崩溃(应该是释放ffmpeg对象时未退出线程造成内存访问错误 demo就不改了)
2、不支持手动点击界面以跳转进度,不过在代码里实现了跳转接口的测试
3、未处理SDL窗口的消息循环 预览窗口不能拖动 且偶尔播放久了后界面未见刷新-测试定位应该是SDL的问题 因为之后解码的AVFrame保存的图片均正常 不予解决
代码片段和文件信息
#include “base.h“
#include
BOOL req_seek = FALSE;
AVFormatContext* g_pFormatCtx = NULL;
int g_videoStream = -1;
int g_audioStream = -1;
AVStream* g_pVideoStream = NULL;
AVStream* g_pAudioStream = NULL;
AVCodecContext* g_pCodecCtx = NULL;
AVCodecContext* g_aCodecCtx = NULL;
AVCodec* g_pCodec = NULL;
AVCodec* g_aCodec = NULL;
BOOL g_bStartPlay = FALSE;
DWORD g_dwStartPlayTime = 0;
BOOL g_bAudioInit = FALSE;
CRITICAL_SECTION g_csAudioList;
vector g_vAudioList; // 读取到的音频包
tMyAudioParams g_tAudioDstParams; // 播放音频的格式
int curAudioSamples = 0; // 获取到一个新的包时 清零该值
CRITICAL_SECTION g_csVideoList;
vector g_vVideoList; // 读取到的视频包
SDL_Overlay* g_bmp = NULL;
struct SwsContext* g_pImgConvertCtx = NULL;
int init_ffmpeg(const char* pFileName)
{
av_register_all();
if(avformat_open_input(&g_pFormatCtx pFileName NULL NULL) != 0)
{
printf(“avformat_open_input fail to open file:%s \n“ pFileName);
return -1;
}
if(avformat_find_stream_info(g_pFormatCtx NULL) < 0)
{
printf(“avformat_find_stream_info fail to find stream \n“);
return -1; // Couldn‘t find stream information
}
for(int i=0; i < g_pFormatCtx->nb_streams; i++) // find the video or audio stream index
{
if(g_pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
{
g_videoStream = i;
}
else if(g_pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
{
g_audioStream = i;
}
if (g_videoStream >= 0 && g_audioStream >= 0)
{
break;
}
}
if((g_videoStream == -1) && (g_audioStream == -1))
{
printf(“can not find any video or audio stream \n“);
return -1;
}
if (g_videoStream >= 0)
{
g_pVideoStream = g_pFormatCtx->streams[g_videoStream];
g_pCodecCtx = g_pFormatCtx->streams[g_videoStream]->codec;
if (g_pCodecCtx) g_pCodec = avcodec_find_decoder(g_pCodecCtx->codec_id);
if (g_pCodec) if(avcodec_open2(g_pCodecCtx g_pCodec NULL) < 0) return -1; // Could not open codec
}
if (g_audioStream >= 0)
{
g_pAudioStream = g_pFormatCtx->streams[g_audioStream];
g_aCodecCtx = g_pFormatCtx->streams[g_audioStream]->codec;
if (g_aCodecCtx) g_aCodec = avcodec_find_decoder(g_aCodecCtx->codec_id);
if (g_aCodec) if(avcodec_open2(g_aCodecCtx g_aCodec NULL) < 0) return -1; // Could not open codec
}
return 0;
}
int init_sdl()
{
if (g_pCodecCtx) // SDL-video show init
{
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))
{
return -2;
}
SDL_Surface* screen = SDL_SetVideoMode(g_pCodecCtx->width g_pCodecCtx->height 0 0);
if(!screen)
{
return -2;
}
g_pImgConvertCtx = sws_getContext(g_pCodecCtx->width g_pCodecCtx->height
g_pCodecCtx->pix_fmt g_pCodecCtx->width g_pCodecCtx->height
AV_PIX_FMT_YUV420P SWS_BICUBIC
NULL NULL NULL);
g_bmp = SDL_CreateYUVOverlay(g_pCodecCtx->width g_pCodecCtx->height SDL_YV12_OVERLAY screen);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-08-14 15:03 ffmpeg wsh\
文件 294 2015-05-11 10:05 ffmpeg wsh\clean.bat
目录 0 2015-08-14 15:03 ffmpeg wsh\Debug\
文件 48 2015-08-14 14:13 ffmpeg wsh\Debug\Copy.bat
目录 0 2015-08-14 14:11 ffmpeg wsh\demos\
目录 0 2015-08-14 15:03 ffmpeg wsh\demos\ffplay\
文件 10756 2015-08-14 15:00 ffmpeg wsh\demos\ffplay\ba
文件 2686 2015-08-14 09:40 ffmpeg wsh\demos\ffplay\ba
文件 4993 2015-08-14 14:15 ffmpeg wsh\demos\ffplay\ffplay.vcxproj
文件 5787 2015-08-14 15:02 ffmpeg wsh\demos\ffplay\main.cpp
文件 891 2015-08-13 16:41 ffmpeg wsh\myFFplay.sln
目录 0 2015-08-14 15:03 ffmpeg wsh\Release\
文件 48 2015-08-14 14:13 ffmpeg wsh\Release\Copy.bat
目录 0 2015-08-14 14:11 ffmpeg wsh\sdk\
目录 0 2015-08-14 14:11 ffmpeg wsh\sdk\bin\
文件 22371840 2015-06-10 10:06 ffmpeg wsh\sdk\bin\avcodec-56.dll
文件 1380352 2015-06-10 10:06 ffmpeg wsh\sdk\bin\avdevice-56.dll
文件 2392576 2015-06-10 10:06 ffmpeg wsh\sdk\bin\avfilter-5.dll
文件 6012928 2015-06-10 10:06 ffmpeg wsh\sdk\bin\avformat-56.dll
文件 493568 2015-06-10 10:06 ffmpeg wsh\sdk\bin\avutil-54.dll
文件 330752 2015-06-10 10:06 ffmpeg wsh\sdk\bin\ffmpeg_org.exe
文件 476160 2015-06-10 10:06 ffmpeg wsh\sdk\bin\ffplay_org.exe
文件 155648 2015-06-10 10:06 ffmpeg wsh\sdk\bin\ffprobe_org.exe
文件 131584 2015-06-10 10:06 ffmpeg wsh\sdk\bin\postproc-53.dll
文件 281600 2015-06-10 10:06 ffmpeg wsh\sdk\bin\swresample-1.dll
文件 452608 2015-06-10 10:06 ffmpeg wsh\sdk\bin\swscale-3.dll
目录 0 2015-08-14 14:11 ffmpeg wsh\sdk\include\
文件 7875 2015-02-05 09:21 ffmpeg wsh\sdk\include\inttypes.h
目录 0 2015-08-14 14:11 ffmpeg wsh\sdk\include\libavcodec\
文件 181963 2015-06-10 10:06 ffmpeg wsh\sdk\include\libavcodec\avcodec.h
文件 3111 2015-06-10 10:06 ffmpeg wsh\sdk\include\libavcodec\avfft.h
............此处省略157个文件信息
- 上一篇:eclipse jetty9.0 插件
- 下一篇:统计软件教程_SAS系统与S语言
相关资源
- ffmpeg api实现视频转码音视频
- FFMPEG入门基础资料pdf
- ffmpeg ffdoc (FFMPEG的最完整教程)
- ffmpeg转码为hls代码
- ffmpeg-4.0.2最新版 windows vs2013编译动态
- ffmpeg实现直播功能
- linuxubuntu下ffmpeg + alsa 的音频播放器
- 内存H264+PCM发布rtmp.rar
- ffmpeg-4.2.1-win32-dev.zip
- M3U8视频PC机64位辅助工具2.0 —&md
- ffmpeg-3.2.tar.bz2
- 适用于VC的FFMpeg静态库已编译)
- 使用ffmpeg api解码h264视频码流,并且能
- MP4v2录制rtsp流存为MP4文件
- [8] ffmpeg + SDL2 实现的视频播放器「快
- ffmpegexe文件
- qt5.8实现rtsp流播放
- OpenCV 1.0.0 patch for ffmpeg errors
- ffmpeg将一个视频文件解码输出bmp和j
- 支持OpenCV3.2的opencv_ffmpeg.7z
-
Mpla
yer.exe 最新版 - ffmpeg 硬件加速
- FFmpeg解码MP4分别播放YUV视频和PCM音频
- ffmpeg(amr转换mp3).exe.zip
- zw_csharp_ffmpeg_rtsp_demo.zip
- 比较新版本的ffmpeg.exe
-
ijkpla
yer-anddroid编译好的so库 已经非 - 编译FFmpeg3.2.2生成的库文件及头文件
- decode_video.tar.gz
- ffmpeg的so文件
评论
共有 条评论