@@ -15,16 +15,16 @@ gq.flv.torrent 是从优酷找的一个超清视频文件做的种子.
1515整个项目分为几个模块:
16161. avcore 这只是一个包装类, 实现windows上的窗口创建以及消息响应, 比如: 右击暂停/开始, 单击按屏幕宽百分比seek, F2全屏切换.
1717 在这个模块中, avplayer类是外部接口类, 具体实现在player_impl类中. 在player_impl类中, 初始化各模块结构指针由下面几个函数实现,
18- void init_file_source(media_source *ms );
19- void init_audio(audio_render *ao);
20- void init_video(video_render *vo);
18+ void init_file_source(source_context *sc );
19+ void init_audio(ao_context *ao);
20+ void init_video(vo_context *vo);
2121 你可以根据自己的需求来修改这些函数实现.
22- media_source是一个提供数据访问的结构 , 包含一些函数指针, 如果你需要重新从其它地方读取数据进来提供给播放器, 那么你可以参照这个结构体, 实现这些函数并指向它, 就可以获得从你指定的地方读取数据来进行播放, 这里实现了一个从文件读取数据播放的dll.
23- audio_render是用于播放音频的结构 , 同样包含了一些函数指针, 只要实现这些函数指针, 就可以改变音频输出, 比如把音频数据写到文件, 这里实现了2种方式输出音频, 一种是使用dsound来输出音频, 另一种是使用waveout来输出音频.
24- video_render是用于渲染视频的结构 , 原理同上, 需要注意的是render_one_frame的data是YUV420格式.
22+ source_context是一个提供数据访问的结构 , 包含一些函数指针, 如果你需要重新从其它地方读取数据进来提供给播放器, 那么你可以参照这个结构体, 实现这些函数并指向它, 就可以获得从你指定的地方读取数据来进行播放, 这里实现了一个从文件读取数据播放的dll.
23+ ao_context是用于播放音频的结构 , 同样包含了一些函数指针, 只要实现这些函数指针, 就可以改变音频输出, 比如把音频数据写到文件, 这里实现了2种方式输出音频, 一种是使用dsound来输出音频, 另一种是使用waveout来输出音频.
24+ vo_context是用于渲染视频的结构 , 原理同上, 需要注意的是render_one_frame的data是YUV420格式.
25252. libav 这是一个基于ffmpeg的播放框架, 该框架不包含视频渲染和音频播放以及数据读取, 若需要可以实现上述结构体各函数即可, 这个框架中主要完成了使用ffmpeg解码, 以及音视频同步, seek操作处理, 并提供一些基本的控制播放器的函数(在avplay.h中定义).
26- 3. audio 是一个音频播放输出模块实现, 主要实现了audio_render中那几个函数指针 . 在这个模块中实现了2套音频输出dsound和waveout.
27- 4. video 是一个视频渲染模块的实现, 实现了video_render中的那几个函数指针 . 在这个模块中, 实现了3套视频渲染输出d3d, ddraw, opengl这些方式(还有gdi方式渲染没有添加到video_out.h中).
26+ 3. audio 是一个音频播放输出模块实现, 主要实现了ao_context中那几个函数指针 . 在这个模块中实现了2套音频输出dsound和waveout.
27+ 4. video 是一个视频渲染模块的实现, 实现了vo_context中的那几个函数指针 . 在这个模块中, 实现了3套视频渲染输出d3d, ddraw, opengl这些方式(还有gdi方式渲染没有添加到video_out.h中).
28285. avplayer 是一个使用avcore实现一个简单播放器的示范, 如果要创建一个播放器, 只需要avplayer.h, 然后使用创建一个avplayer对象, 就可以创建一个播放器, 关于如何使用avcore的具体细节可以参考avplayer/main.cpp.
2929
3030
0 commit comments