既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
1、源码ffplay.c迁移qt编译
首先尝试了再vs下是要msvc进行编译发现报错误
: “unistd.h”: No such file or directory
百度解决方案意思是再linux下开发的C程序都需要头文件unistd.h,但VC中没有个头文件,
所以用VC编译总是报错。但是根据网上的方法,自己定义,h文件发现汇报其他错误
参考链接:https://www.cnblogs.com/ManMonth/archive/2010/02/01/1661142.html [转]VC报错 ‘unistd.h’: No such file or directory
则改到qt中新建工程引入ffplay.c
效果图
注意点:
1)编译环境&参数传入
2)运行时所需要的动态库和文件需要放过去
2、源代码解析
2.1、函数流程分析
参考公众号:txb玩linux中相关文章
入口函数main
main
init_dynload;win32设置动态库当前路径警告
av_log_set_flags
parse_loglevel
avdevice_register_all
parse_options
SDL_Init
SDL_CreateWindow
SDL_CreateRenderer
stream_open
frame_queue_init;创建循环帧队列,视频音频字幕
packet_queue_init;创建循环包队列,视频音频字幕
SDL_CreateCond;
init_clock ;初始化时钟 视频音频字幕
SDL\_CreateThread(read_thread)
event_loop
read_thread线程主要完成解封装,读取多媒体包数据放入包缓冲队列中,
read_thread
//解封装
avformat_alloc_context;创建上下文结构体
interrupt_callback.callback = decode_interrupt_cb;设置中断回调函数
avformat_open_input;打开文件
avformat_find_stream_info;探测媒体类型,
avformat_seek_file;需要指定起始位置
is_realtime;是否为实时流媒体
av_find_best_stream;将为流的编解码器找到默认的解码器,视频音频字幕
av_guess_sample_aspect_ratio
set_default_window_size
stream_component_open;相应解码器,并创建相应的解码线程;视频、音频解码器字幕
avcodec_alloc_context3;编解码器上下文结构体
avcodec_parameters_to_context;将码流中的编解码器信息拷贝到新分配的编解码器上下文结构体
avcodec_find_decoder;codec_id查找解码器
音频
audio_open
SDL_Init
SDL_getenv
wanted_spec.callback = sdl_audio_callback;
decoder_init
decoder_start
SDL_CreateThread(audio_thread)//创建音频解码线程
视频
decoder_init
decoder_start
SDL_CreateThread(video_thread)//创建视频解码线程
字幕
decoder_init
decoder_start
SDL_CreateThread(subtitle_thread)
//读取多媒体包数据放入对应的包缓冲队列中
for (;;)
是否有seek请求
缓存队列有足够的包,不需要继续读取数据
av_read_frame;读取媒体数据、对应视频音频字幕
packet_queue_put;音视频数据分别送入相应的queue、对应视频音频字幕
event_loop 线程主要完成视频sdl显示及sdl的一些事件处理
//视频输出
event_loop
for (;;)
refresh_loop_wait_event
while (!SDL_PeepEvents)
av_usleep;remaining_time就是用来进行音视频同步的。
video_refresh;显示每一帧
frame_queue_peek
video_display
video_open;设置宽高,sdlwindows设置
SDL_SetRenderDrawColor
SDL_RenderClear
video_audio_display;播放声音
video_image_display;渲染视频
SDL_RenderPresent
sdl事件监听
sdl_audio_callback线程,主要完成声音的输出
//声音输出
sdl_audio_callback
while
audio_decode_frame
frame_queue_next
音频相关操作
update_sample_display
memcpy(stream, (uint8\_t \*)is->audio_buf
audio_thread线程主要完成从音频包缓冲队列中拿包解码将解码后的帧数据放入帧缓冲队列中
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)