1、客户端分拆方案,jarjar2005.10,各个模块,播放插件(ChaosFilter和NetworkProxy)NetworkProxy从NetworkStub读取数据交给ChaosFilter播放ChaosFilter根据播放状态调用NetworkProxy控制本地进程本地进程(LocalServer和NetworkStub)NetworkStub从Layer1读取数据,然后Push给NetworkProxyLocalServer负责给用户显示信息LocalServer支持同时与多个播放插件进行交互Layer1负责下载数据并存储到缓冲文件多语言独立的DLL,提供从ID到String的查找升
2、级程序负责检查程序版本是否最新负责下载最新程序并解压,同时显示下载进度安装过程中能够提示用户关闭占用目标文件的进程,给出列表其他NetworkProxy和NetworkStub通信使用Socket或者Windows Message,Layer1,播放插件,客户端各个模块关系图,-开始下载-停止下载-获取数据-显示讯息,- 获取讯息,-初始化-开始下载-停止下载-获取数据-此次缓冲结束-获取缓冲进度-获取传输信息-获取频道名称-获取频道码率开始下载-停止下载-获取数据-显示讯息,创建,Update,-启动升级进程并等待升级完成, 获取讯息,简单流程,ChaosFilter call Networ
3、kProxy:Request()NetworkProxy execute update process and wait until update finished.NetworkProxy connect to LocalServerLocalServer new ChannelMgr, and pass socket_from_proxy and ChaosUI to ChannelMgr.ChannelMgr new NetworkStub, and pass socket_from_proxy to NetworkStub.Stub Read call from socket.Stub
4、 call ChannelMgr:Request(),Proxy & Stub,Proxy,Stub,Message,Audio,Video,声音和视频要分开传输,因为数据不是严格同步的。分开之后,使用阻塞的Socket更加方便。,流程: (Local Server = LS)Proxy启动升级程序,等待升级程序退出(升级完毕)。 Proxy发送MSG(包含gtv url和Proxy接收消息的窗口名)给LS。LS初始化一个Stub,Stub初始化一个Layer1。Stub发送MSG告知Proxy初始化失败或者成功。Proxy连接上LS,说明自己属于某个Stub。LS将连接交给Stub。Stub
5、从Layer1读取数据,分视频/音频通过Socket发送给Proxy。Proxy开始播放。Proxy发送MSG通知Stub停止播放。Stub释放Layer1及自身。辅助:Proxy和Layer1将要显示的消息发送给Stub, Stub交给LS显示。Stub发现Layer1的数据不足,开始循环检查缓冲进度(同时交给LS显示),缓冲结束后通知Layer1。异常:Stub初始化Layer1失败,通知Proxy停止播放,交给LS显示信息。Layer1下载过程中发生致命错误,通知Stub,Stub通知Proxy停止播放,交给LS显示信息。,不允许同时打开一个以上的player播放同一个频道。,每个Pro
6、xy有一个接收消息的Window(随机名字),Local Server有一个接收消息的Window(固定名字),都可以通过FindWindow查找。,例外情况,播放插件进程被突然中止本地进程每隔一段时间检查每个播放插件的线程是否还存在。本地进程进程被突然中止播放插件每隔一段时间检查网络程序是否存在。如果不存在,则重复启动过程,并且准备接受新的播放位置(可能有些难度)。,播放插件内部结构,The Filter,Video Pin读取Socket播放,Audio Pin读取Socket播放,NetworkProxy,检查网络程序是否存在(准备好重新启动播放的流程),根据播放状态控制网络程序,多语言
7、切换,本地进程结构,The EXE,显示信息(托盘图标/菜单/气泡)(类QQ的通知窗口),NetworkStub A,多语言切换,定时启动自动升级定时检查每个播放插件是否存在,检查缓冲进度,NetworkStub B,检查缓冲进度,Layer1结构,The EXE,TrackServer通讯,管理P2P连接下载数据并存储到缓冲文件,对外接口,多语言切换,升级程序,The Updater,检查是否最新版本,下载并解压最新版本,提示用户关闭占用目标文件的进程,覆盖目标文件,安装完成,等待目标进程退出,覆盖目标文件,关闭,不关闭,多语言切换,多语言,使用类似ini文件的格式比如Jpn.iniIDE_1=“ ”Eng.iniIDE_1=“good good”Chn.iniIDE_1=“好好”自动检测操作系统使用的语言调用相应的ini文件,如果没有,则使用默认的ini文件。,