GameAnywhere代码结构

GameAnywhere是一个开源的云游戏平台,其代码结构包括服务端和Android客户端。服务端涉及图像采集、预处理、编码、传输等功能,采用NVIDIA硬编码、FFmpeg等模块。Android客户端包含C/C++ Native库和Java App,实现触控指令传输、媒体流接收与解码。主要依赖Live555进行音视频传输。
摘要由CSDN通过智能技术生成

GameAnywhere 是一个开源的云游戏平台,由 Chun-Ying Huang 在2013年开发,最开始是毕业论文研究使用,近期随着云游戏风口正盛,这个项目关注度又有起色,本文介绍GameAnywhere代码构成。GameAnywhere 的License为 BSD3,可以修改代码后闭源,但是项目依赖的开源组件较多,需要注意 License。

代码构成

目录结构

├─bin
│  ├─config
│  │  └─common
│  ├─data
│  ├─log
│  └─mod
├─deps.pkg.win32      #依赖组件的windows包
│  ├─bin
│  ├─NvCodec
│  └─NVENC
├─deps.posix          #依赖组件的unix包
│  └─lib
├─deps.src            #依赖组件的源码
│  └─patches
├─deps.win32          #依赖组件的Windows头文件与库
│  ├─bin
│  ├─include
│  │  ├─include
│  │  ├─lib
│  │  ├─libavcodec
│  │  ├─libavdevice
│  │  ├─libavfilter
│  │  ├─libavformat
│  │  ├─libavutil
│  │  ├─libpostproc
│  │  ├─libswresample
│  │  ├─libswscale
│  │  ├─live555
│  │  ├─NVENC
│  │  └─SDL2
│  └─lib
├─docs
└─ga
    ├─android   # android客户端
    ├─client    # windows客户端
    ├─core      # 公共依赖部分
    ├─module    # 各个功能模块
    │  ├─asource-system   # apple 平台的音频抓取
    │  ├─ctrl-sdl         # 键盘输入
    │  ├─encoder-audio    # 音频编码
    │  ├─encoder-mfx
    │  ├─encoder-nvenc    # NVIDIA 硬编码
    │  ├─encoder-video    # FFmpeg 软编码
    │  ├─encoder-x264     # 编码x264库
    │  ├─filter-rgb2yuv   # rgb转yuv库,编码前预处理
    │  ├─server-ffmpeg    # FFmpeg库
    │  ├─server-live555   # live555 项目,承载 rtsp 协议
    │  └─vsource-desktop  # DirectX GDI 抓图
    ├─server
    │  ├─event-driven     # 键盘鼠标输入windows平台实现
    │  ├─event-posix      # 键盘鼠标输入posix平台实现
    │  └─periodic         # 可执行文件 Main 函数,依赖 ga/core
    └─vs2010    #Visual Studio工程
        ├─BasicUsageEnvironment
        ├─CloudGameDM_Installer
        ├─encoder-nvenc
        ├─ga-client
        ├─ga-hook
        ├─ga-server-event-driven
        ├─ga-server-periodic
        ├─groupsock
        ├─ipch
        ├─libga
        ├─liveMedia
        ├─module-asource-system
        ├─module-ctrl-sdl
        ├─module-encoder-audio
        ├─module-encoder-video
        ├─module-encoder-x264
        ├─module-filter-rgb2yuv
        ├─module-server-ffmpeg
        ├─module-server-live555
        ├─module-vsource-desktop
        ├─module-vsource-desktop-d3d
        ├─module-vsource-desktop-dfm
        └─UsageEnvironment

服务端

Main: server\ga\server\periodic\ga-server-periodic.cpp

Server 端的功能:图像采集、图像预处理、声音采集、键盘输入、音视频编码、封包、传输功能,这些功能分别由对应GameAnywhere定义的模块实现。

//
if (load_modules() < 0) {
  write_log("error, load_modules error ! \n");
  return -1;
}
if (init_modules() < 0) {
  write_log("error, init_modules error ! \n");
  return -1;
}
if (run_modules() < 0) {
  write_log("error, run_modules error ! \n");
  return -1;
}

GameAnywhere 模块类型定义: server\ga\core\ga-module.h

/**
 * Enumeration for types of a module.
 */
enum ga_module_types {
    GA_MODULE_TYPE_NULL = 0,    /**< Not used */
    GA_MODULE_TYPE_CONTROL,        /**< Is a controller module */
    GA_MODULE_TYPE_ASOURCE,        /**< Is an audio source module */
    GA_MODULE_TYPE_VSOURCE,        /**< Is an video source module */
    GA_MODULE_TYPE_FILTER,        /**< Is a filter module */
    GA_MODULE_TYPE_AENCODER,    /**< Is an audio encoder module */
    GA_MODULE_TYPE_VENCODER,    /**< Is a video encoder module */
    GA_MODULE_TYPE_ADECODER,    /**< Is an audio decoder module */
    GA_MODULE_TYPE_VDECODER,    /**< Is a video decoder module */
    GA_MODULE_TYPE_SERVER        /**< Is a server module */
};

GameAnywhere 模块定义: server\ga\core\ga-module.h

/**
 * Data strucure to represent a module.
 */
typedef struct ga_module_s {
    HMODULE    handle;        /**< Handle to a module */
    int type;        /**< Type of the module */
    char *name;        /**< Name of the module */
    char *mimetype;        /**< MIME-type o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值