1 / 11

客户端分拆方案

客户端分拆方案. jarjar 2005.10. 各个模块. 播放插件( ChaosFilter 和 NetworkProxy ) NetworkProxy 从 NetworkStub 读取数据 交给 ChaosFilter 播放 ChaosFilter 根据播放状态调用 NetworkProxy 控制 本地进程 本地进程( LocalServer 和 NetworkStub ) NetworkStub 从 Layer1 读取数据,然后 Push 给 NetworkProxy LocalServer 负责给用户 显示信息

Download Presentation

客户端分拆方案

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 客户端分拆方案 jarjar 2005.10

  2. 各个模块 • 播放插件(ChaosFilter和NetworkProxy) • NetworkProxy从NetworkStub读取数据交给ChaosFilter播放 • ChaosFilter根据播放状态调用NetworkProxy控制本地进程 • 本地进程(LocalServer和NetworkStub) • NetworkStub从Layer1读取数据,然后Push给NetworkProxy • LocalServer负责给用户显示信息 • LocalServer支持同时与多个播放插件进行交互 • Layer1 • 负责下载数据并存储到缓冲文件 • 多语言 • 独立的DLL,提供从ID到String的查找 • 升级程序 • 负责检查程序版本是否最新 • 负责下载最新程序并解压,同时显示下载进度 • 安装过程中能够提示用户关闭占用目标文件的进程,给出列表 • 其他 • NetworkProxy和NetworkStub通信使用Socket或者Windows Message

  3. 客户端各个模块关系图 播放插件 Update ->启动升级进程并等待升级完成 ->开始下载 ->停止下载 ->获取数据 ->显示讯息 <-请求下载 中转调用(Message) 本地进程 Layer1 ->开始下载 ->停止下载 ->获取数据 ->显示讯息 ->初始化 ->开始下载 ->停止下载 ->获取数据 ->此次缓冲结束 ->获取缓冲进度 ->获取传输信息 ->获取频道名称 ->获取频道码率 <-显示讯息 -> 获取讯息 <-创建 ->创建 -> 获取讯息

  4. 简单流程 • ChaosFilter call NetworkProxy::Request() • NetworkProxy execute update process and wait until update finished. • NetworkProxy connect to LocalServer • LocalServer 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 call ChannelMgr::Request()

  5. Proxy & Stub Message Proxy Stub 声音和视频要分开传输,因为数据不是严格同步的。分开之后,使用阻塞的Socket更加方便。 不允许同时打开一个以上的player播放同一个频道。 Audio 每个Proxy有一个接收消息的Window(随机名字),Local Server有一个接收消息的Window(固定名字),都可以通过FindWindow查找。 Video 流程: (Local Server = LS) Proxy启动升级程序,等待升级程序退出(升级完毕)。 Proxy发送MSG(包含gtv url和Proxy接收消息的窗口名)给LS。 LS初始化一个Stub,Stub初始化一个Layer1。Stub发送MSG告知Proxy初始化失败或者成功。 Proxy连接上LS,说明自己属于某个Stub。LS将连接交给Stub。 Stub从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显示信息。

  6. 例外情况 • 播放插件进程被突然中止 • 本地进程每隔一段时间检查每个播放插件的线程是否还存在。 • 本地进程进程被突然中止 • 播放插件每隔一段时间检查网络程序是否存在。如果不存在,则重复启动过程,并且准备接受新的播放位置(可能有些难度)。

  7. 播放插件内部结构 The Filter 多语言切换 Video Pin 读取Socket播放 Audio Pin 读取Socket播放 NetworkProxy 检查网络程序是否存在 (准备好重新启动播放的流程) 根据播放状态控制网络程序

  8. 本地进程结构 The EXE 多语言切换 NetworkStub A 检查缓冲进度 定时启动自动升级 定时检查每个播放 插件是否存在 NetworkStub B 显示信息 (托盘图标/菜单/气泡) (类QQ的通知窗口) 检查缓冲进度

  9. Layer1结构 The EXE 多语言切换 TrackServer通讯 对外接口 管理P2P连接 下载数据并存储到缓冲文件

  10. 升级程序 The Updater 多语言切换 检查是否最新版本 下载并解压最新版本 提示用户关闭占用目标文件的进程 关闭 不关闭 覆盖目标文件,安装完成 等待目标进程退出,覆盖目标文件

  11. 多语言 • 使用类似ini文件的格式 • 比如 • Jpn.ini • IDE_1=“ソフトウェア ” • Eng.ini • IDE_1=“good good” • Chn.ini • IDE_1=“好好” • 自动检测操作系统使用的语言调用相应的ini文件,如果没有,则使用默认的ini文件。

More Related