1. SDK压缩包的目录:

目录 说明 备注
Demo P2P 直播(多源)模块的演示程序的代码
DemoApp 编译好演示程序的APK安装包文件。 演示程序登录到PP透架设的P2P服务器,地址:connect.peergine.com:7781
Doc 文档目录
Lib P2P 直播(多源)模块的*.jar和*.so库文件:

Lib\pgliblivemulti.jar(请在工程的java build path中引用)

Lib\pgPluginLib (请在工程中的属性中引用此中间件的库工程)

2. 播放端API接口(Java类com.peergine.android.livemulti.pgLibLiveMultiRender):

1)调用API流程的样例:

// 创建P2P直播对象:

pgLibLiveMultiRender m_LiveRen = new pgLibLiveMultiRender ();

// 创建事件回调接口对象

private pgLibLiveMultiRender.OnEventListener m_OnEvent = new m_LiveRen.OnEventListener() {

@Override

public void event(String sAct, String sData, String sCapID) {

// 处理事件的代码……

}

};

// 注册事件回调接口到P2P直播对象。

m_LiveRen.SetEventListener(m_OnEvent);

// 调用P2P直播实例初始化函数

m_LiveRen.Initialize();

// 连接采集端

m_LiveRen.Connect(sCapID);

// 调用其他业务功能的函数,根据实际需要调用具体的API。

m_LiveRen.VideoStart()

m_LiveRen.VideoStop()

m_LiveRen.AudioStart()

m_LiveRen.AudioStop()

m_LiveRen.MessageSend()

// 断开连接

m_LiveRen.Disconnect(sCapID);

// 清理P2P直播实例。

// 如果音频、视频已经打开,必须先关闭,然后再执行清理实例的操作。

m_LiveRen.Clean();

2)常量:

错误码定义。

pgLibLiveMultiRender.PG_ERR_Normal = 0, // 成功

pgLibLiveMultiRender.PG_ERR_System = 1, // 系统错误

pgLibLiveMultiRender.PG_ERR_BadParam = 2, // 参数错误

pgLibLiveMultiRender.PG_ERR_BadClass = 3, // 无效的功能类

pgLibLiveMultiRender.PG_ERR_BadMethod = 4, // 无效的方法

pgLibLiveMultiRender.PG_ERR_BadObject = 5, / /无效的对象

pgLibLiveMultiRender.PG_ERR_BadStatus = 6, // 错误的状态

pgLibLiveMultiRender.PG_ERR_BadFile = 7, // 无效的文件

pgLibLiveMultiRender.PG_ERR_BadUser = 8, // 无效的用户

pgLibLiveMultiRender.PG_ERR_BadPass = 9, // 密码错误

pgLibLiveMultiRender.PG_ERR_NoLogin = 10, // 未登录

pgLibLiveMultiRender.PG_ERR_Network = 11, // 网络错误

pgLibLiveMultiRender.PG_ERR_Timeout = 12, // 操作超时

pgLibLiveMultiRender.PG_ERR_Reject = 13, // 拒绝访问

pgLibLiveMultiRender.PG_ERR_Busy = 14, // 系统正忙

pgLibLiveMultiRender.PG_ERR_Opened = 15, // 资源已经打开

pgLibLiveMultiRender.PG_ERR_Closed = 16, // 资源已经关闭

pgLibLiveMultiRender.PG_ERR_Exist = 17, // 资源已经存在

pgLibLiveMultiRender.PG_ERR_NoExist = 18, // 资源不存在

pgLibLiveMultiRender.PG_ERR_NoSpace = 19, // 空间或容量限制

pgLibLiveMultiRender.PG_ERR_BadType = 20, // 无效的类型

pgLibLiveMultiRender.PG_ERR_CheckErr = 21, // 校验错误

pgLibLiveMultiRender.PG_ERR_BadServer = 22, // 无效的服务器

pgLibLiveMultiRender.PG_ERR_BadDomain = 23, // 无效的域

pgLibLiveMultiRender.PG_ERR_NoData = 24, // 没有数据

pgLibLiveMultiRender.PG_ERR_Unknown = 255, // 未知错误

pgLibLiveMultiRender.PG_ERR_Extend = 256, // 用户自定义错误码起始编号

3)函数声明:

SetEventListener: 注册回调接口

/**

* 描述:注册回调接口。

* 阻塞方式:非阻塞,立即返回。

* eventListener:[IN] 回调接口对象。

*/

public void SetEventListener(OnEventListener eventListener)

Initialize: 实例初始化

/**

* 描述:P2P直播模块初始化函数

* 阻塞方式:非阻塞,立即返回。

* sUser:[IN] 客户端的登录用户名(或者称为P2P ID)

* sPass:[IN] 客户端的登录密码

* sSvrAddr:[IN] P2P服务器的地址端口,例如:“127.0.0.1:7781”

* sRelayAddr:[IN] 中继服务器地址端口,P2P无法穿透的情况下通过中继服务器转发。

* 例如:”127.0.0.1:443″,如果传空字符串,则使用P2P服务器的IP地址加上443端口构成转发服务器地址。

*

* iP2PTryTime:[IN] P2P穿透尝试时间(单位为秒)。

* (iP2PTryTime == 0):使用缺省值,缺省值为6秒。

* (iP2PTryTime > 0 && iP2PTryTime <= 3600):超时值为所传的iP2PTryTime

* (iP2PTryTime > 3600):禁用P2P穿透,直接用转发。

*

* sInitParam:[IN] 初始化参数。格式为:(VideoInExternal){0}(VideoInExternal){0}

* (VideoOutExtCmp){0}(AudioInExternal){0}(AudioOutExternal){0}

* VideoInExternal: 启用视频输入回调接口。0为禁用,1为启用。

* VideoOutExternal: 启用视频解码后输出回调接口。0为禁用,1为启用。

* VideoOutExtCmp: 启用视频解码前输出回调接口。0为禁用,1为启用。

* AudioInExternal: 启用音频输入回调接口。0为禁用,1为启用。

* AudioOutExternal: 启用音频解码后输出回调接口。0为禁用,1为启用。

* BufSize0: 优先级0的发送缓冲区长度(单位为K字节),传0则使用缺省值,缺省为64(K)

* BufSize1: 优先级1的发送缓冲区长度(单位为K字节),传0则使用缺省值,缺省为64(K)

* BufSize2: 优先级2的发送缓冲区长度(单位为K字节),传0则使用缺省值,缺省为512(K)

* BufSize3: 优先级3的发送缓冲区长度(单位为K字节),传0则使用缺省值,缺省为128(K)

* Digest: 是否使用摘要方式传递密码。0为明文方式,1为摘要方式。(缺省为1)

* SingleMode: 是否启用兼容单视频源的P2P直播SDK模式。0为不启用,1为启用。(缺省为0)

* AloneRenID: 是否启用播放端ID不加随机数作为后缀。0为不启用,1为启用。(缺省为0)

* LogLevel0: 是否开启Major级别的日志信息输出。1为开启,0为关闭,默认为1

* LogLevel1: 是否开启General级别的日志信息输出。1为开启,0为关闭,默认为1

* LogLevel2: 是否开启Suggestive级别的日志信息输出。1为开启,0为关闭,默认为0

* LogLevel3: 是否开启Info级别的日志信息输出。1为开启,0为关闭,默认为0

* Debug: 是否开启调试信息打印。1为开启,0为关闭,默认为0

* EncryptMsg: 是否加密传输(发送)消息。1为加密,0为不加密,默认为0

* LoginDelayInterval: 尝试重新登录的退避时间的增长步进(秒)。有效范围1 ~ 300,默认10

* LoginDelayMax: 尝试重新登录的退避时间的最大值(秒)。有效范围30 ~ 300,默认300

* DnsRandom: 启用从DNS解析结果的多个IP地址中随机选择1个IP地址。1启用,0禁用,默认为1

* DnsUseIPv4: 是否使用DNS解析结果中的IPV4地址。1使用,0禁用,默认为1

* DnsUseIPv6: 是否使用DNS解析结果中的IPV6地址。1使用,0禁用,默认为1

* VideoSoftEncode: 强制使用软件视频编码。1强制使用,0自适应,默认为0

* VideoSoftDecode: 强制使用软件视频解码。1强制使用,0自适应,默认为0

*

* oCtx:[IN] Application上下文。

* 返回值:见‘常量->错误码定义’

*/

public int Initialize(String sUser, String sPass, String sSvrAddr,

String sRelayAddr, int iP2PTryTime, String sInitParam, Context oCtx)

Clean: 实例清理函数

/**

* 描述:P2P直播模块清理,释放所有资源。

* 阻塞方式:非阻塞,立即返回。

*/

public void Clean()

GetNode: 获取中间件对象

/**

* 获取中间件对象

* 返回值:中间件对象

*/

public pgLibJNINode GetNode()

GetSelfPeer: 获取本实例自身的P2P节点名称

/**

* 描述:获取本实例自身的P2P节点名称。

* 阻塞方式:非阻塞,立即返回。

* 返回值:P2P节点名称

*/

public String GetSelfPeer()

LanScanStart: 搜索同一台路由器局域网内的P2P直播采集端

/**

* 描述:搜索同一台路由器局域网内的P2P直播采集端。搜索结果通过LanScanResult事件上报

* 阻塞方式:非阻塞,立即返回。

* 返回值:见‘常量->错误码定义’

*/

public int LanScanStart()

Connect: 连接采集端

/**

* 描述:连接采集端。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* 返回值:见‘常量->错误码定义’

*/

public int Connect(String sCapID)

Disconnect: 断开与采集端的连接

/**

* 描述:断开与采集端的连接。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* 返回值:见‘常量->错误码定义’

*/

public void Disconnect(String sCapID)

Connected: 判断是否已经连接采集端

/**

* 描述:判断是否已经连接采集端。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* 返回值:见‘常量->错误码定义’

*/

int Connected(String sCapID)

MessageSend: 发送消息给采集端

/**

* 描述:发送消息给采集端

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sData:[IN] 发送消息的内容

* 返回值:见‘常量->错误码定义’

*/

public int MessageSend(String sCapID, String sData)

VideoModeSize: 重新定义视频分辨率模式的尺寸

/**

* 描述:重新定义指定视频分辨率模式的尺寸。

* 此函数调用时机:

* 在Initialize()调用之后,VideoStart()调用之前。

* 阻塞方式:非阻塞,立即返回。

* iMode:[IN] 需要重新定义尺寸的视频分辨率模式,有效值范围:1~31。

* iWidth:[IN] 视频的宽(像素)。

* iHeight:[IN] 视频的高(像素)。

* 返回值:见‘常量->错误码定义’

*/

public int VideoModeSize(int iMode, int iWidth, int iHeight)

VideoStart: 开始视频播放

/**

* 描述:开始视频采集。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sParam:[IN] 视频参数。格式为:(MaxStream){0}

* MaxStream: 允许最大发送的视频流数量,默认为0条。

* Encrypt: 是否加密传输(发送)视频流数据。1为加密,0为不加密(默认为0)

* OutRotate: 播放端增加旋转视频图像的角度。有效值:0,90,180,270,默认为0

* OutMirror: 播放端镜像翻转图像。0为不翻转,1为左右翻转,2为上下翻转,默认为0

*

* nodeView:[IN] 视频播放显示的SurfaceView对象或者视频帧外部输出的ViewID。

* 1) 视频帧数据直接在SDK内部进行图像显示时传入SurfaceView对象,

* 通过pgLibLiveMultiView.Get()获取SurfaceView对象。

* 2) 视频帧数据通过回调接口输出到SDK外部处理时,传入Integer类型的ViewID。例如:

* Integer ViewID = Integer.valueOf(1);

* 在通过扩展回调接口输出视频数据时,这个ViewID就是视频输出回调函数pfnVideoOutOpen()

* 的uDevNO参数。请参考《Peergine 扩展设备输入输出C接口说 x.x.doc》文档。

*

* 返回值:见‘常量->错误码定义’

*/

public int VideoStart(String sCapID, int iVideoID, String sParam, Object nodeView)

VideoStop: 停止视频播放

/**

* 描述:停止视频采集。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

*/

public void VideoStop(String sCapID, int iVideoID)

VideoParam: 修改视频参数

/**

* 描述:修改视频参数。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sParam:[IN] 视频参数。格式为:(MaxStream){0}

* MaxStream: 允许最大发送的视频流数量,默认为2条。

*

* 返回值:见‘常量->错误码定义’

*/

public int VideoParam(String sCapID, int iVideoID, String sParam)

VideoCamera: 抓拍照片

/**

* 描述:抓拍照片。通过‘VideoCamera’事件上报拍照结果。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sJpgPath:[IN] 保存照片文件的路径,文件名后缀必须为*.jpg。(路径必须使用UTF8字符集编码)

* 返回值:见‘常量->错误码定义’

*/

public int VideoCamera(String sCapID, int iVideoID, String sJpgPath)

VideoShowMode: 视频图像显示模式

/**

* 描述:视频图像显示模式。

* 阻塞方式:非阻塞,立即返回。

* iMode:[IN] 图像显示模式。0为裁剪,1为整幅,2为拉伸。

* 返回值:见‘常量->错误码定义’

*/

public int VideoShowMode(int iMode)

AudioStart: 开始音频通话

/**

* 描述:开始音频通话。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sParam:[IN] 音频参数。格式为:(MuteInput){1}(MuteOutput){1}

* Reliable:启用可靠传输方式传输音频数据。0为不可靠传输(默认),1为可靠传输。

* MuteInput:输入静音。1为启用静音,0为取消静音(默认)。

* MuteOutput:输出静音。1为启用静音,0为取消静音(默认)。

* SpeechSelf:本端发言控制。1为允许发言(默认),0为禁止发言。

* SpeechPeer:对端发言控制。1为允许发言(默认),0为禁止发言。

* MuteGate:设置静音门限的音量,范围为0 ~ 32767(缺省为90)。

* EchoCancel:开启关闭回音消除,1为开启,0为关闭(缺省为1)。

* RenderSpeech:开启或禁止播放端之间通音频,1为开启,0为禁止(缺省为1)。

* Delay:设置音频播放延时时间(毫秒),默认为0。

* Encrypt: 是否加密传输(发送)音频流数据。1为加密,0为不加密(默认为0)

*

* 返回值:见‘常量->错误码定义’

*/

public int AudioStart(String sCapID, int iAudioID, String sParam)

AudioStop: 停止音频通话

/**

* 描述:停止音频通话。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

*/

public void AudioStop(String sCapID, int iAudioID)

AudioSpeech: 音频发言控制

/**

* 描述:音频发言控制。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* bEnable:[IN] 发言状态。true:允许发言,false:禁止发言。

* 返回值:见‘常量->错误码定义’

*/

public int AudioSpeech(String sCapID, int iAudioID, boolean bEnable)

AudioParam: 设置音频参数

/**

* 描述:设置音频参数。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sParam:[IN] 音频参数。格式为:(MuteGate){90}

* MuteGate:设置静音门限的音量,范围为0 ~ 32767(缺省为90)。

* EchoCancel:开启关闭回音消除,1为开启,0为关闭(缺省为1)。

* 返回值:见‘常量->错误码定义’

*/

public int AudioParam(String sCapID, int iAudioID, String sParam)

AudioMute: 音频静音操作

/**

* 描述:音频静音操作。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* bInput:[IN] 音频输入的静音状态。true为开启静音,false为关闭静音。

* bOutput:[IN] 音频输出的静音状态。true为开启静音,false为关闭静音。

* 返回值:见‘常量->错误码定义’

*/

public int AudioMute(String sCapID, int iAudioID, boolean bInput, boolean bOutput)

AudioSyncDelay: 音频流从指定的视频流同步延时时间

/**

* 描述:音频流从指定的视频流同步延时时间。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* iVideoID:[IN] 同步延时的参考视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* 返回值:见‘常量->错误码定义’

*/

int AudioSyncDelay(String sCapID, int iAudioID, int iVideoID);

RecordStart: 播放端开始视频/音频录像到指定的媒体文件

/**

* 描述:播放端开始视频/音频录像到指定的媒体文件。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sAviPath:[IN] 媒体文件的路径。文件扩展名必须为.avi、.mov或mp4。

* iVideoID :[IN] 录制的视频流ID,小于0为不录制视频,SingleMode时传0。

* iAudioID:[IN] 录制的音频流ID,小于0为不录制音频,SingleMode时传0。

* 返回值:见‘常量->错误码定义’

*/

public int RecordStart(String sCapID, String sAviPath, int iVideoID, int iAudioID)

RecordStop: 播放端停止视频/音频录像

/**

* 描述:播放端停止视频/音频录像。

* 阻塞方式:非阻塞,立即返回

* sCapID:[IN] 指定采集端的P2P ID

* 返回值: 无

*/

public void RecordStop(String sCapID)

FilePutRequest: 请求上传文件给采集端

/**

* 描述:请求上传文件给采集端。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sPath:[IN] 指定上传的文件路径(全路径)

* sPeerPath:[IN] 文件在采集端存储的相对路径。

* 如果此参数传空,则SDK自动从sPath参数中截取文件名作为本参数。

* 返回值:见‘常量->错误码定义’

*/

public int FilePutRequest(String sCapID, String sPath, String sPeerPath)

FileGetRequest: 请求从采集端下载文件

/**

* 描述:请求从采集端下载文件。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sPath:[IN] 指定保存此下载文件的路径(全路径)

* sPeerPath:[IN] 文件在采集端存储的相对路径。

* 如果此参数传空,则SDK自动从sPath参数中截取文件名作为本参数。

* 返回值:见‘常量->错误码定义’

*/

public int FileGetRequest(String sCapID, String sPath, String sPeerPath)

FileAccept: 接受采集端的文件上传或文件下载请求(已经作废)

/**

* 描述:接受采集端的文件上传或文件下载请求。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sPath:[IN] 指定保存此上传文件的路径,或指定下载文件的路径。(全路径)

* 返回值:见‘常量->错误码定义’

*/

public int FileAccept(String sCapID, String sPath)

FileReject: 拒绝采集端的文件上传或文件下载请求(已经作废)

/**

* 描述:拒绝采集端的文件上传或文件下载请求。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iErrCode:[IN] 拒绝的原因。见‘常量->错误码定义’。

* 返回值:见‘常量->错误码定义’

*/

public int FileReject(String sCapID, int iErrCode)

FileCancel: 取消(中断)正在进行的文件传输

/**

* 描述:取消(中断)正在进行的文件传输。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* 返回值:见‘常量->错误码定义’

*/

public int FileCancel(String sCapID)

FilePutRequest2: 请求上传文件给采集端(增强版)

/**

* 描述:请求上传文件给采集端(增强版)。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sPath:[IN] 指定上传的文件路径(全路径)

* sPeerPath:[IN] 文件在采集端存储的相对路径。

* 如果此参数传空,则SDK自动从sPath参数中截取文件名作为本参数。

* iOffset: [IN] 指定上传文件的起始偏移位置(字节数),从0开始。

* iSize: [IN] 传输的数据长度(字节数),传入0表示传输到文件的末尾。

* 返回值:见‘常量->错误码定义’

*/

public int FilePutRequest2(String sCapID, String sPath, String sPeerPath, int iOffset, int iSize)

FileGetRequest2: 请求从采集端下载文件(增强版)

/**

* 描述:请求从采集端下载文件(增强版)。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sPath:[IN] 指定保存此下载文件的路径(全路径)

* sPeerPath:[IN] 文件在采集端存储的相对路径。

* 如果此参数传空,则SDK自动从sPath参数中截取文件名作为本参数。

* iOffset: [IN] 指定下载文件的起始偏移位置(字节数),从0开始。

* iSize: [IN] 传输的数据长度(字节数),传入0表示传输到文件的末尾。

* 返回值:见‘常量->错误码定义’

*/

public int FileGetRequest2(String sCapID, String sPath, String sPeerPath, int iOffset, int iSize)

SvrRequest: 发送P2P服务器请求的函数

/**

* 描述:向P2P服务器发送一个请求。服务器返回的应答结果通过SvrReply上报

* 阻塞方式:非阻塞,立即返回。

* sData:[IN] 请求发送的内容,任意字符串。(必须用UTF8字符集编码)

* sParam:[IN] 自定义参数。(目的是使请求和应答能够相匹配)。

* 返回值:见‘常量->错误码定义’

*/

public int SvrRequest(String sData, String sParam)

Version: 获取本模块的版本

/**

* 描述:获取本模块的版本。

* 阻塞方式:非阻塞,立即返回。

* 返回值:版本信息

*/

public String Version();

4)上报事件的参数:

Notify:接收到Capture组播的通知

sAction: Notify

sData: 接收到的消息内容,格式由应用程序自己定义

sCanID: 发送该消息的采集端的P2P ID

Message:接收到Capture发送的消息

sAction: Message

sData: 接收到的消息内容,格式由应用程序自己定义

sCanID: 发送该消息的采集端的P2P ID

LanScanResult:局域网搜索结果返回

sAction: LanScanResult

sData: 局域网搜索结果,格式:id=采集端P2PID&addr=采集端的地址端口

sCanID: 无

VideoStatus:上报视频采集的状态。

sAction: VideoStatus

sData: 视频状态信息,格式为:videoid=视频流ID&bitrate=码率(bps)&frmrate=帧率

&frmplay=当前播放的帧号&frmkeycount=关键帧计数&frmtotal=回放的视频文件的总帧数

sCanID: 无

VideoCamera:抓拍视频照片保存到文件成功。

sAction: VideoCamera

sData: 保存照片的文件的路径

sCanID: 无

Login:登录到P2P服务器成功(上线)

sAction: Login

sData: 错误码

sCanID: 无

Logout:从P2P服务器注销或掉线(下线)

sAction: Logout

sData: 无

sRenID: 无

SvrReply:P2P服务器应答事件。

sAction: SvrReply

sData: 服务器返回的消息内容,格式由应用程序自己定义。

sCanID: 调用SvrRequest()函数时,传入的sParam参数

SvrReplyError:调用SvrRequest返回错误。

sAction: SvrReplyError

sData: 错误码。

sCanID: 调用SvrRequest()函数时,传入的sParam参数

SvrNotify:P2P服务器推送事件。

sAction: SvrNotify

sData: 推送消息的内容,格式由应用程序自己定义。

sCanID: 无

KickOut:被服务器踢出,因为有另外一个相同ID的节点登录了

sAction: KickOut

sData: 无。

sCanID: 无

Connect:分配视频转发资源返回结果

sAction: Connect

sData: 无

sCanID: 所连接的采集端的P2P ID

Disconnect:释放视频转发资源返回结果

sAction: Disconnect

sData: 无

sCanID: 所连接的采集端的P2P ID

Reject:采集端主动拒绝连接

sAction: Reject

sData: 无

sCanID: 所连接的采集端的P2P ID

Offline:所连接的采集端已经离线。

sAction: Offline

sData: 无。

sCanID: 所连接的采集端的P2P ID

FilePutRequest:采集端请求上传文件(已经作废)

sAction: FilePutRequest

sData: 格式为:peerpath=文件的相对路径

sCanID: 发送请求的采集端的P2P ID

FileGetRequest:采集端请求下载文件(已经作废)

sAction: FileGetRequest

sData: 格式为:peerpath=文件的相对路径

sCanID: 发送请求的采集端的P2P ID

FileAccept:采集端接收了本播放端的文件传输请求

sAction: FileAccept

sData: 错误码

sCanID: 接受请求的采集端的P2P ID

FileReject:采集端拒绝了本播放端的文件传输请求

sAction: FileReject

sData: 错误码

sCanID: 拒绝请求的采集端的P2P ID

FileProgress:文件传输进度上报

sAction: FileProgress

sData: 格式为:path=本地文件路径&total=总长度&position=已传输的长度

sCanID: 传输文件的采集端的P2P ID

FileFinish:文件传输完成

sAction: FileFinish

sData: 格式为:path=本地文件路径&total=总长度&position=已传输的长度

sCanID: 传输文件的采集端的P2P ID

FileAbort:文件传输中断

sAction: FileAbort

sData: 格式为:path=本地文件路径&total=总长度&position=已传输的长度

sCanID: 传输文件的采集端的P2P ID

PeerInfo:上报连接通道信息

sAction: PeerInfo

sData: 连接通道的信息

sCanID: 无

RecordStopVideo:停止录制视频

sAction: RecordStopVideo

sData: 格式为:videoid=视频流ID&error=错误码&path=录制的媒体文件路径

sCanID: 采集端ID

RecordStopAudio:停止录制音频

sAction: RecordStopAudio

sData: 格式为:audioid=音频流ID&error=错误码&path=录制的媒体文件路径

sCanID: 采集端ID

3. 采集端API接口(Java类com.peergine.android.livemulti.pgLibLiveMultiCapture):

1)调用API流程的样例:

// 创建P2P直播对象:

pgLibLiveMultiCapture m_LiveCap = new pgLibLiveMultiCapture();

// 创建事件回调接口对象

private pgLibLiveMultiCapture.OnEventListener m_OnEvent = new m_LiveCap.OnEventListener() {

@Override

public void event(String sAct, String sData, String sRanID) {

// 处理事件的代码……

}

};

// 注册事件回调接口到P2P直播对象。

m_LiveCap.SetEventListener(m_OnEvent);

// 调用P2P直播实例初始化函数

m_LiveCap.Initialize();

// 创建摄像头采集View

m_View = m_LiveCap.CameraViewGet();

// 调用其他业务功能的函数,根据实际需要调用具体的API。

m_LiveCap.VideoStart()

m_LiveCap.VideoStop()

m_LiveCap.AudioStart()

m_LiveCap.AudioStop()

m_LiveCap.NotifySend()

m_LiveCap.MessageSend()

// 销毁摄像头采集View

m_LiveCap.CameraViewRelease();

// 清理P2P直播实例。

// 如果音频、视频已经打开,必须先关闭,然后再执行清理实例的操作。

m_LiveCap.Clean();

2)常量:

错误码定义。

pgLibLiveMultiCapture.PG_ERR_Normal = 0, // 成功

pgLibLiveMultiCapture.PG_ERR_System = 1, // 系统错误

pgLibLiveMultiCapture.PG_ERR_BadParam = 2, // 参数错误

pgLibLiveMultiCapture.PG_ERR_BadClass = 3, // 无效的功能类

pgLibLiveMultiCapture.PG_ERR_BadMethod = 4, // 无效的方法

pgLibLiveMultiCapture.PG_ERR_BadObject = 5, / /无效的对象

pgLibLiveMultiCapture.PG_ERR_BadStatus = 6, // 错误的状态

pgLibLiveMultiCapture.PG_ERR_BadFile = 7, // 无效的文件

pgLibLiveMultiCapture.PG_ERR_BadUser = 8, // 无效的用户

pgLibLiveMultiCapture.PG_ERR_BadPass = 9, // 密码错误

pgLibLiveMultiCapture.PG_ERR_NoLogin = 10, // 未登录

pgLibLiveMultiCapture.PG_ERR_Network = 11, // 网络错误

pgLibLiveMultiCapture.PG_ERR_Timeout = 12, // 操作超时

pgLibLiveMultiCapture.PG_ERR_Reject = 13, // 拒绝访问

pgLibLiveMultiCapture.PG_ERR_Busy = 14, // 系统正忙

pgLibLiveMultiCapture.PG_ERR_Opened = 15, // 资源已经打开

pgLibLiveMultiCapture.PG_ERR_Closed = 16, // 资源已经关闭

pgLibLiveMultiCapture.PG_ERR_Exist = 17, // 资源已经存在

pgLibLiveMultiCapture.PG_ERR_NoExist = 18, // 资源不存在

pgLibLiveMultiCapture.PG_ERR_NoSpace = 19, // 空间或容量限制

pgLibLiveMultiCapture.PG_ERR_BadType = 20, // 无效的类型

pgLibLiveMultiCapture.PG_ERR_CheckErr = 21, // 校验错误

pgLibLiveMultiCapture.PG_ERR_BadServer = 22, // 无效的服务器

pgLibLiveMultiCapture.PG_ERR_BadDomain = 23, // 无效的域

pgLibLiveMultiCapture.PG_ERR_NoData = 24, // 没有数据

pgLibLiveMultiCapture.PG_ERR_Unknown = 255, // 未知错误

pgLibLiveMultiCapture.PG_ERR_Extend = 256, // 用户自定义错误码起始编号

3)函数声明:

SetEventListener: 注册回调接口

/**

* 描述:注册回调接口。

* 阻塞方式:非阻塞,立即返回。

* eventListener:[IN] 回调接口对象。

*/

public void SetEventListener(OnEventListener eventListener)

Initialize: 实例初始化

/**

* 描述:P2P直播模块初始化函数

* 阻塞方式:非阻塞,立即返回。

* sUser:[IN] 客户端的登录用户名(或者称为P2P ID)

* sPass:[IN] 客户端的登录密码

* sSvrAddr:[IN] P2P服务器的地址端口,例如:“127.0.0.1:7781”

* sRelayAddr:[IN] 中继服务器地址端口,P2P无法穿透的情况下通过中继服务器转发。

* 例如:”127.0.0.1:443″,如果传空字符串,则使用P2P服务器的IP地址加上443端口构成转发服务器地址。

*

* iP2PTryTime:[IN] P2P穿透尝试时间(单位为秒)。

* (iP2PTryTime == 0):使用缺省值,缺省值为6秒。

* (iP2PTryTime > 0 && iP2PTryTime <= 3600):超时值为所传的iP2PTryTime

* (iP2PTryTime > 3600):禁用P2P穿透,直接用转发。

*

* sInitParam:[IN] 初始化参数。格式为:(VideoInExternal){0}(VideoInExternal){0}

* (VideoOutExtCmp){0}(AudioInExternal){0}(AudioOutExternal){0}

* VideoInExternal: 启用视频输入回调接口。0为禁用,1为启用。

* VideoOutExternal: 启用视频解码后输出回调接口。0为禁用,1为启用。

* VideoOutExtCmp: 启用视频解码前输出回调接口。0为禁用,1为启用。

* AudioInExternal: 启用音频输入回调接口。0为禁用,1为启用。

* AudioOutExternal: 启用音频解码后输出回调接口。0为禁用,1为启用。

* BufSize0: 优先级0的发送缓冲区长度(单位为K字节),传0则使用缺省值,缺省为64(K)

* BufSize1: 优先级1的发送缓冲区长度(单位为K字节),传0则使用缺省值,缺省为64(K)

* BufSize2: 优先级2的发送缓冲区长度(单位为K字节),传0则使用缺省值,缺省为512(K)

* BufSize3: 优先级3的发送缓冲区长度(单位为K字节),传0则使用缺省值,缺省为128(K)

* Digest: 是否使用摘要方式传递密码。0为明文方式,1为摘要方式。(缺省为1)

* SocketInitWnd: 设置初始Socket发送窗口。1, 2, 3, …(缺省为1)

* SingleMode: 是否启用兼容单视频源的P2P直播SDK模式。0为不启用,1为启用。(缺省为0)

* LogLevel0: 是否开启Major级别的日志信息输出。1为开启,0为关闭,默认为1

* LogLevel1: 是否开启General级别的日志信息输出。1为开启,0为关闭,默认为1

* LogLevel2: 是否开启Suggestive级别的日志信息输出。1为开启,0为关闭,默认为0

* LogLevel3: 是否开启Info级别的日志信息输出。1为开启,0为关闭,默认为0

* Debug: 是否开启调试信息打印。1为开启,0为关闭,默认为0

* EncryptMsg: 是否加密传输(发送)消息。1为加密,0为不加密,默认为0

* LoginDelayInterval: 尝试重新登录的退避时间的增长步进(秒)。有效范围1 ~ 300,默认10

* LoginDelayMax: 尝试重新登录的退避时间的最大值(秒)。有效范围30 ~ 300,默认300

* DnsRandom: 启用从DNS解析结果的多个IP地址中随机选择1个IP地址。1启用,0禁用,默认为1

* DnsUseIPv4: 是否使用DNS解析结果中的IPV4地址。1使用,0禁用,默认为1

* DnsUseIPv6: 是否使用DNS解析结果中的IPV6地址。1使用,0禁用,默认为1

* VideoSoftEncode: 强制使用软件视频编码。1强制使用,0自适应,默认为0

* VideoSoftDecode: 强制使用软件视频解码。1强制使用,0自适应,默认为0

*

* oCtx:[IN] Application上下文。

* 返回值:见‘常量->错误码定义’

*/

public int Initialize(String sUser, String sPass, String sSvrAddr,

String sRelayAddr, int iP2PTryTime, String sInitParam, Context oCtx)

Clean: 实例清理函数

/**

* 描述:P2P直播模块清理,释放所有资源。

* 阻塞方式:非阻塞,立即返回。

*/

public void Clean()

GetNode: 获取中间件对象

/**

* 获取中间件对象

* 返回值:中间件对象

*/

public pgLibJNINode GetNode()

GetSelfPeer: 获取本实例自身的P2P节点名称

/**

* 描述:获取本实例自身的P2P节点名称。

* 阻塞方式:非阻塞,立即返回。

* 返回值:P2P节点名称

*/

public String GetSelfPeer()

RenderReject: 拒绝一个指定的Render的连接

/**

* 描述:拒绝一个指定的Render的连接。

* 阻塞方式:非阻塞,立即返回。

* sRenID:[IN] 指定Render的P2P节点ID

* 返回值:见‘常量->错误码定义’

*/

public int RenderReject(String sRenID)

RenderAccess: 开启和关闭指定的Render的视频和音频访问权限

/**

* 描述:开启和关闭指定的Render的视频和音频访问权限。

* 阻塞方式:非阻塞,立即返回。

* sRenID:[IN] 指定Render的P2P节点ID

* bVideo:[IN] true:允许视频访问,false:禁止视频访问。默认为允许访问。

* bAudio:[IN] true:允许音频访问,false:禁止音频访问。默认为允许访问。

* 返回值:见‘常量->错误码定义’

*/

public int RenderAccess(String sRenID, boolean bVideo, boolean bAudio)

RenderEnum: 遍历查询当前连接的Render的P2P ID

/**

* 描述:遍历查询当前连接的Render的P2P ID。

* 阻塞方式:非阻塞,立即返回。

* iIndex:[IN] 遍历查询的索引号:0, 1, 2, 3, …

* 返回值:非空: Render的P2P ID,空: 遍历查询结束

*/

public String RenderEnum(int iIndex)

RenderConnected: 判断指定的Render是否已经连接本采集端

/**

* 描述:判断指定的Render是否已经连接本采集端。

* 阻塞方式:非阻塞,立即返回。

* sRenID:[IN] 指定Render的P2P节点ID

* 返回值:见枚举‘PG_LIVE_MULTI_ERR_E’的定义

*/

int RenderConnected(String sRenID)

NotifySend: 发送通知函数

/**

* 描述:组播发送通知给各个Render

* 阻塞方式:非阻塞,立即返回。

* sData:[IN] 组播通知的内容

* 返回值:见‘常量->错误码定义’

*/

public int NotifySend(String sData)

MessageSend: 发送消息给播放端

/**

* 描述:发送消息给播放端

* 阻塞方式:非阻塞,立即返回。

* sRenID:[IN] 发送目的Render的P2P节点ID

* sData:[IN] 发送消息的内容

* 返回值:见‘常量->错误码定义’

*/

public int MessageSend(String sRenID, String sData)

CameraViewGet: 创建并返回摄像头采集SurfaceView

/**

* 描述:创建并返回摄像头采集SurfaceView

* 摄像头采集SurfaceView自然就是摄像头的图像预览View

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sData:[IN] 发送消息的内容

* 返回值:非null: 摄像头采集SurfaceView, null: 失败

*/

public SurfaceView CameraViewGet()

CameraViewRelease: 释放销毁摄像头采集SurfaceView

/**

* 描述:释放销毁摄像头采集SurfaceView

* 阻塞方式:非阻塞,立即返回。

*/

public void CameraViewRelease()

VideoModeSize: 重新定义视频分辨率模式的尺寸

/**

* 描述:重新定义指定视频分辨率模式的尺寸。

* 此函数调用时机:

* 在Initialize()调用之后,VideoStart()调用之前。

* 阻塞方式:非阻塞,立即返回。

* iMode:[IN] 需要重新定义尺寸的视频分辨率模式,有效值范围:1~31。

* iWidth:[IN] 视频的宽(像素)。

* iHeight:[IN] 视频的高(像素)。

* 返回值:见‘常量->错误码定义’

*/

public int VideoModeSize(int iMode, int iWidth, int iHeight)

VideoStart: 开始视频采集

/**

* 描述:开始视频采集。

* 阻塞方式:非阻塞,立即返回。

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sParam:[IN] 视频参数。格式为:(Code){3}(Mode){2}(Rate){40}(CameraNo){0}(Portrait){1}

* (BitRate){400}(MaxStream){0}

* Code: 视频压缩编码类型:1为MJPEG、2为VP8、3为H264、4为H265。

* Mode: 视频图像的分辨率(尺寸),有效数值如下:(仅采集端有效)

* 0: 80×60, 1: 160×120, 2: 320×240, 3: 640×480,

* 4: 800×600, 5: 1024×768, 6: 176×144, 7: 352×288,

* 8: 704×576, 9: 854×480, 10: 1280×720, 11: 1920×1080

* 12 ~ 31:用户自定义分辨率

*

* Rate: 视频的帧间间隔(毫秒)。例如40毫秒的帧率为:1000/40 = 25 fps

* CameraNo: 摄像头(视频源)编号。0, 1, 2, …

* 在通过扩展回调接口输入视频数据时,这个CameraNo就是视频输入回调函数pfnVideoInOpen()

* 的uDevNO参数。请参考《Peergine 扩展设备输入输出C接口说明x.x.doc》文档。

* Portrait: 采集图像的方向。0为横屏,1为竖屏。(移动设备有效)

* BitRate: 视频压缩后的码率。单位为Kbps

* MaxStream: 允许最大发送的视频流数量,默认为2条。

* Delay: 视频缓冲延时的时间,默认为200毫秒。

* FrameStat: 启用视频帧统计。1为启用,0为禁用(默认为0)

* Encrypt: 是否加密传输(发送)视频流数据。1为加密,0为不加密(默认为0)

* SendCache: 在视频采集产生第一个关键帧之前,先发送缓冲区中的视频帧数据,

* 加快播放端看到视频图像。1为启用,0为禁用(默认为0)

* InRotate: 采集端旋转视频图像到指定的角度再进行编码。有效值:0,90,180,270,默认为0

*

* ***以下为回放视频文件模式的参数***

* Playback: 启用回放模式。1为使用回放模式,0为使用视频采集模式

* (不指定Playback参数时,默认也是使用视频采集模式)

* Path: 视频回放的视频文件的路径(支持avi,mp4,mov视频文件)

*

* nodeView:[IN] 视频预览显示的SurfaceView对象。

* 通过pgLibLiveMultiView.Get()获取SurfaceView对象。

* 如果已经使用CameraViewGet()获取的摄像头采集SurfaceView作为预览View,则此参数传null

*

* 返回值:见‘常量->错误码定义’

*/

public int VideoStart(int iVideoID, String sParam, SurfaceView nodeView)

VideoStop: 停止视频采集

/**

* 描述:停止视频采集。

* 阻塞方式:非阻塞,立即返回。

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

*/

public void VideoStop(int iVideoID)

VideoParam: 修改视频参数

/**

* 描述:修改视频参数。

* 阻塞方式:非阻塞,立即返回。

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sParam:[IN] 视频参数。格式为:(Code){3}(Mode){2}(Rate){40}(CameraNo){0}(Portrait){1}

* (BitRate){400}(MaxStream){0}

* Code: 视频压缩编码类型:1为MJPEG、2为VP8、3为H264、4为H265。

* Mode: 视频图像的分辨率(尺寸),有效数值如下:(仅采集端有效)

* 0: 80×60, 1: 160×120, 2: 320×240, 3: 640×480,

* 4: 800×600, 5: 1024×768, 6: 176×144, 7: 352×288,

* 8: 704×576, 9: 854×480, 10: 1280×720, 11: 1920×1080

* 12 ~ 31:用户自定义分辨率

*

* Rate: 视频的帧间间隔(毫秒)。例如40毫秒的帧率为:1000/40 = 25 fps

* CameraNo: 摄像头编号。0, 1, 2, …

* BitRate: 视频压缩后的码率。单位为 Kbps

* MaxStream: 允许最大发送的视频流数量,默认为2条。

*

* ***以下为回放视频文件模式的参数***

* Pause: 暂停回放。1为暂停回放,0为继续回放。

* Seek: 跳转到指定的位置播放,此参数传入跳转位置的帧序号。

* 回放的视频文件的总长度帧数可以通过VideoStatus事件上报的frmtotal参数获取。

*

* 返回值:见‘常量->错误码定义’

*/

public int VideoParam(int iVideoID, String sParam)

VideoCamera: 抓拍照片

/**

* 描述:抓拍照片。通过‘VideoCamera’事件上报拍照结果。

* 阻塞方式:非阻塞,立即返回。

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sJpgPath:[IN] 保存照片文件的路径,文件名后缀必须为*.jpg。(路径必须使用UTF8字符集编码)

* 返回值:见‘常量->错误码定义’

*/

public int VideoCamera(int iVideoID, String sJpgPath)

VideoForwardAlloc: 请求分配视频转发资源

/**

* 描述:请求分配视频转发资源。

* 阻塞方式:非阻塞,立即返回。

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0,小于0时忽略。

* sParam:[IN] 回调参数。在ForwardAllocFree事件的RenID参数返回

* 返回值:见‘常量->错误码定义’

*/

public int VideoForwardAlloc(int iVideoID, String sParam)

VideoForwardFree: 请求释放视频转发资源

/**

* 描述:请求释放视频转发资源。

* 阻塞方式:非阻塞,立即返回。

* iVideoID:[IN] 视频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0,小于0时忽略

* sParam:[IN] 回调参数。在ForwardAllocFree事件的RenID参数返回

* 返回值:见‘常量->错误码定义’

*/

public int VideoForwardFree(int iVideoID, String sParam)

VideoShowMode: 视频图像显示模式

/**

* 描述:视频图像显示模式。

* 此函数只对pgLibLiveMultiView.Get()创建的SurfaceView有效。

* 阻塞方式:非阻塞,立即返回。

* iMode:[IN] 图像显示模式。0为裁剪,1为整幅,2为拉伸。

* 返回值:见‘常量->错误码定义’

*/

public int VideoShowMode(int iMode)

AudioStart: 开始音频通话

/**

* 描述:开始音频通话。

* 阻塞方式:非阻塞,立即返回。

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sParam:[IN] 音频参数。格式为:(MuteInput){1}(MuteOutput){1}

* Reliable:启用可靠传输方式传输音频数据。0为不可靠传输(默认),1为可靠传输。

* MuteInput:输入静音。1为启用静音,0为取消静音(默认)。

* MuteOutput:输出静音。1为启用静音,0为取消静音(默认)。

* SpeechSelf:本端发言控制。1为允许发言(默认),0为禁止发言。

* SpeechPeer:对端发言控制。1为允许发言(默认),0为禁止发言。

* MicNo:指定音频输入录音的麦克风编号。有效值:0, 1, 2, …,必须小于65535。

* 在通过扩展回调接口输入音频数据时,这个MicNo就是音频输入回调函数pfnAudioInOpen()

* 的uDevNO参数。请参考《Peergine 扩展设备输入输出C接口说明x.x.doc》文档。

*

* SpeakerNo:指定音频输出放音的扬声器编号。有效值:0, 1, 2, …,必须小于65535。

* 在通过扩展回调接口输出音频数据时,这个SpeakerNo就是音频输出回调函数pfnAudioOutOpen()

* 的uDevNO参数。请参考《Peergine 扩展设备输入输出C接口说明x.x.doc》文档。

*

* MuteGate:设置静音门限的音量,范围为0 ~ 32767(缺省为90)。

* EchoCancel:开启关闭回音消除,1为开启,0为关闭(缺省为1)。

* Encrypt: 是否加密传输(发送)音频流数据。1为加密,0为不加密(默认为0)

*

* 返回值:见‘常量->错误码定义’

*/

public int AudioStart(int iAudioID, String sParam)

AudioStop: 停止音频通话

/**

* 描述:停止音频通话。

* 阻塞方式:非阻塞,立即返回。

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

*/

public void AudioStop(int iAudioID)

AudioSpeech: 音频发言控制

/**

* 描述:音频发言控制。

* 阻塞方式:非阻塞,立即返回。

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sRenID:[IN] 指定播放端的P2P ID

* bEnable:[IN] 发言状态。true:允许发言,false:禁止发言。

* 返回值:见‘常量->错误码定义’

*/

public int AudioSpeech(int iAudioID, String sRenID, boolean bEnable)

AudioParam: 设置音频参数

/**

* 描述:设置音频参数。

* 阻塞方式:非阻塞,立即返回。

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* sParam:[IN] 音频参数。格式为:(MuteGate){90}

* MuteGate:设置静音门限的音量,范围为0 ~ 32767(缺省为90)。

* EchoCancel:开启关闭回音消除,1为开启,0为关闭(缺省为1)。

* 返回值:见‘常量->错误码定义’

*/

public int AudioParam(int iAudioID, String sParam)

AudioMute: 音频静音操作

/**

* 描述:音频静音操作。

* 阻塞方式:非阻塞,立即返回。

* iAudioID:[IN] 音频流ID。有效值:0, 1, 2, 3, 4, …,SingleMode时传0。

* bInput:[IN] 音频输入的静音状态。true为开启静音,false为关闭静音。

* bOutput:[IN] 音频输出的静音状态。true为开启静音,false为关闭静音。

* 返回值:见‘常量->错误码定义’

*/

public int AudioMute(int iAudioID, boolean bInput, boolean bOutput)

RecordStart: 采集端开始视频/音频录像到指定的媒体文件

/**

* 描述:采集端开始视频/音频录像到指定的媒体文件。

* 阻塞方式:非阻塞,立即返回。

* sTag:[IN] 录制操作标识(一个字符串标识,在停止录像操作时,需要传入相同的标识)

* sAviPath:[IN] 媒体文件的路径。文件扩展名必须为.avi、.mov或mp4。

* iVideoID :[IN] 录制的视频流ID,小于0为不录制视频,SingleMode时传0。

* iAudioID:[IN] 录制的音频流ID,小于0为不录制音频,SingleMode时传0。

* 返回值:见‘常量->错误码定义’

*/

public int RecordStart(String sTag, String sAviPath, int iVideoID, int iAudioID)

RecordStop: 采集端停止视频/音频录像

/**

* 描述:采集端停止视频/音频录像。

* 阻塞方式:非阻塞,立即返回

* sTag:[IN] 录制操作标识

* 返回值: 无

*/

public void RecordStop(String sTag)

FilePutRequest: 请求上传文件给播放端(已经作废)

/**

* 描述:请求上传文件给播放端(已经作废)。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sPath:[IN] 指定上传的文件路径(全路径)

* sPeerPath:[IN] 文件在播放端存储的相对路径。

* 如果此参数传空,则SDK自动从sPath参数中截取文件名作为本参数。

* 返回值:见‘常量->错误码定义’

*/

public int FilePutRequest(String sCapID, String sPath, String sPeerPath)

FileGetRequest: 请求从播放端下载文件(已经作废)

/**

* 描述:请求从播放端下载文件(已经作废)。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sPath:[IN] 指定保存此下载文件的路径(全路径)

* sPeerPath:[IN] 文件在播放端存储的相对路径。

* 如果此参数传空,则SDK自动从sPath参数中截取文件名作为本参数。

* 返回值:见‘常量->错误码定义’

*/

public int FileGetRequest(String sCapID, String sPath, String sPeerPath)

FileAccept: 接受播放端的文件上传或文件下载请求

/**

* 描述:接受播放端的文件上传或文件下载请求。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* sPath:[IN] 指定保存此上传文件的路径,或指定下载文件的路径(全路径)

* 返回值:见‘常量->错误码定义’

*/

public int FileAccept(String sCapID, String sPath)

FileReject: 拒绝播放端的文件上传或文件下载请求

/**

* 描述:拒绝播放端的文件上传或文件下载请求。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* iErrCode:[IN] 拒绝的原因。见‘常量->错误码定义’。

* 返回值:见‘常量->错误码定义’

*/

public int FileReject(String sCapID, int iErrCode)

FileCancel: 取消(中断)正在进行的文件传输

/**

* 描述:取消(中断)正在进行的文件传输。

* 阻塞方式:非阻塞,立即返回。

* sCapID:[IN] 指定采集端的P2P ID

* 返回值:见‘常量->错误码定义’

*/

public int FileCancel(String sCapID)

SvrRequest: 发送P2P服务器请求的函数

/**

* 描述:向P2P服务器发送一个请求。服务器返回的应答结果通过SvrReply上报

* 阻塞方式:非阻塞,立即返回。

* sData:[IN] 请求发送的内容,任意字符串。(必须用UTF8字符集编码)

* sParam:[IN] 自定义参数。(目的是使请求和应答能够相匹配)。

* 返回值:见‘常量->错误码定义’

*/

public int SvrRequest(String sData, String sParam)

Version: 获取本模块的版本

/**

* 描述:获取本模块的版本。

* 阻塞方式:非阻塞,立即返回。

* 返回值:版本信息

*/

public String Version();

4)上报事件的参数:

Message:接收到Render发送的消息

sAction: Message

sData: 接收到的消息内容,格式由应用程序自己定义

sRenID: 发送该消息的播放端的P2P ID

RenderJoin:Render加入视频直播组

sAction: RenderJoin

sData: 无

sRenID: 加入直播组的播放端的P2P ID

RenderLeave:Render离开视频直播组。

sAction: RenderLeave

sData: 无

sRenID: 离开直播组的播放端的P2P ID

VideoStatus:上报视频采集的状态。

sAction: VideoStatus

sData: 视频状态信息,格式为:videoid=视频流ID&bitrate=码率(bps)&frmrate=帧率

&frmplay=当前播放的帧号&frmkeycount=关键帧计数&frmtotal=回放的视频文件的总帧数

sRenID: 无

VideoCamera:抓拍视频照片保存到文件成功。

sAction: VideoCamera

sData: 保存照片的文件的路径

sRenID: 无

VideoFrameStat:上报视频帧发送失败统计信息。

sAction: VideoFrameStat

sData: total=总帧数&drop=丢弃的帧数

sRenID: 播放端的P2P ID

Login:登录到P2P服务器成功(上线)

sAction: Login

sData: 错误码

sRenID: 无

Logout:从P2P服务器注销或掉线(下线)

sAction: Logout

sData: 无

sRenID: 无

SvrReply:P2P服务器应答事件。

sAction: SvrReply

sData: 服务器返回的消息内容,格式由应用程序自己定义。

sRenID: 调用pgLiveMultiCaptureSvrRequest()函数时,传入的sParam参数

SvrReplyError:调用SvrRequest返回错误。

sAction: SvrReplyError

sData: 错误码。

sRenID: 调用pgLiveMultiCaptureSvrRequest()函数时,传入的sParam参数

SvrNotify:P2P服务器推送事件。

sAction: SvrNotify

sData: 推送消息的内容,格式由应用程序自己定义。

sRenID: 无

KickOut:被服务器踢出,因为有另外一个相同ID的节点登录了

sAction: KickOut

sData: 无。

sRenID: 无

ForwardAllocReply:分配视频转发资源返回结果

sAction: ForwardAllocReply

sData: 错误码

sRenID: 返回sParam参数

ForwardFreeReply:释放视频转发资源返回结果

sAction: ForwardFreeReply

sData: 错误码

sRenID: 返回sParam参数

FilePutRequest:播放端请求上传文件

sAction: FilePutRequest

sData: 格式为:peerpath=文件的相对路径

sRenID: 发送请求的播放端的P2P ID

FileGetRequest:播放端请求下载文件

sAction: FileGetRequest

sData: 格式为:peerpath=文件的相对路径

sRenID: 发送请求的播放端的P2P ID

FileAccept:播放端接收了本采集端的文件传输请求(已经作废)

sAction: FileAccept

sData: 错误码

sRenID: 接受请求的播放端的P2P ID

FileReject:播放端拒绝了本采集端的文件传输请求(已经作废)

sAction: FileReject

sData: 错误码

sRenID: 拒绝请求的播放端的P2P ID

FileProgress:文件传输进度上报

sAction: FileProgress

sData: 格式为:path=本地文件路径&total=总长度&position=已传输的长度

sRenID: 传输文件的播放端的P2P ID

FileFinish:文件传输完成

sAction: FileFinish

sData: 格式为:path=本地文件路径&total=总长度&position=已传输的长度

sRenID: 传输文件的播放端的P2P ID

FileAbort:文件传输中断

sAction: FileAbort

sData: 格式为:path=本地文件路径&total=总长度&position=已传输的长度

lpszRender: 传输文件的播放端的P2P ID

PeerInfo:上报连接通道信息

sAction: PeerInfo

sData: 格式为:peer=P2P节点名&through=通道类型&proxy=P2P服务器地址&addrlcl=本端登录地址&addrrmt=对端登录地址&tunnellcl=本端通道地址&tunnelrmt=对端通道地址&privatermt=对端私网地址

sRenID: 传输文件的播放端的P2P ID

RecordStopVideo:停止录制视频

sAction: RecordStopVideo

sData: 格式为:videoid=视频流ID&error=错误码&path=录制的媒体文件路径

sRenID:

RecordStopAudio:停止录制音频

sAction: RecordStopAudio

sData: 格式为:audioid=音频流ID&error=错误码&path=录制的媒体文件路径

sRenID:

4. 媒体文件播放器API接口(Java类com.peergine.android.livemulti.pgLibLiveMultiPlayer):

1)调用API流程的样例:

// 创建播放器对象:

pgLibLiveMultiPlayer m_Player = new pgLibLiveMultiPlayer();

// 创建事件回调接口对象

private pgLibLiveMultiPlayer.OnEventListener m_OnEvent = new m_Player.OnEventListener() {

@Override

public void event(String sAct, String sData, String sParam) {

// 处理事件的代码……

}

};

// 注册事件回调接口到P2P直播对象。

m_Player.SetEventListener(m_OnEvent);

// 调用播放器实例初始化函数

m_Player.Initialize();

// 创建显示图像的VIEW

SurfaceView* m_pView = pgLibLiveMultiView.Get(“view0”);

// 开始播放媒体文件

m_Player.Start(sMediaFilePath, m_pView);

// 调用其他播放功能的函数,根据实际需要调用具体的API。

// …

// 停止播放媒体文件

m_Player.Stop(sMediaFilePath);

// 释放VIEW

pgLibLiveMultiView.Release(m_pView);

// 清理播放器实例。

m_Player.Clean();

2)常量:

错误码定义。

pgLibLiveMultiCapture.PG_ERR_Normal = 0, // 成功

pgLibLiveMultiCapture.PG_ERR_System = 1, // 系统错误

pgLibLiveMultiCapture.PG_ERR_BadParam = 2, // 参数错误

pgLibLiveMultiCapture.PG_ERR_BadClass = 3, // 无效的功能类

pgLibLiveMultiCapture.PG_ERR_BadMethod = 4, // 无效的方法

pgLibLiveMultiCapture.PG_ERR_BadObject = 5, / /无效的对象

pgLibLiveMultiCapture.PG_ERR_BadStatus = 6, // 错误的状态

pgLibLiveMultiCapture.PG_ERR_BadFile = 7, // 无效的文件

pgLibLiveMultiCapture.PG_ERR_BadUser = 8, // 无效的用户

pgLibLiveMultiCapture.PG_ERR_BadPass = 9, // 密码错误

pgLibLiveMultiCapture.PG_ERR_NoLogin = 10, // 未登录

pgLibLiveMultiCapture.PG_ERR_Network = 11, // 网络错误

pgLibLiveMultiCapture.PG_ERR_Timeout = 12, // 操作超时

pgLibLiveMultiCapture.PG_ERR_Reject = 13, // 拒绝访问

pgLibLiveMultiCapture.PG_ERR_Busy = 14, // 系统正忙

pgLibLiveMultiCapture.PG_ERR_Opened = 15, // 资源已经打开

pgLibLiveMultiCapture.PG_ERR_Closed = 16, // 资源已经关闭

pgLibLiveMultiCapture.PG_ERR_Exist = 17, // 资源已经存在

pgLibLiveMultiCapture.PG_ERR_NoExist = 18, // 资源不存在

pgLibLiveMultiCapture.PG_ERR_NoSpace = 19, // 空间或容量限制

pgLibLiveMultiCapture.PG_ERR_BadType = 20, // 无效的类型

pgLibLiveMultiCapture.PG_ERR_CheckErr = 21, // 校验错误

pgLibLiveMultiCapture.PG_ERR_BadServer = 22, // 无效的服务器

pgLibLiveMultiCapture.PG_ERR_BadDomain = 23, // 无效的域

pgLibLiveMultiCapture.PG_ERR_NoData = 24, // 没有数据

pgLibLiveMultiCapture.PG_ERR_Unknown = 255, // 未知错误

pgLibLiveMultiCapture.PG_ERR_Extend = 256, // 用户自定义错误码起始编号

3)函数声明:

SetEventListener: 注册回调接口

/**

* 描述:注册回调接口。

* 阻塞方式:非阻塞,立即返回。

* eventListener:[IN] 回调接口对象。

*/

public void SetEventListener(OnEventListener eventListener)

Initialize: 实例初始化

/**

* 描述:播放器模块初始化函数

* 阻塞方式:非阻塞,立即返回。

* sInitParam:[IN] 初始化参数。格式为:(Debug){1}(LogLevel0){1}

* LogLevel0: 是否开启Major级别的日志信息输出。1为开启,0为关闭,默认为1

* LogLevel1: 是否开启General级别的日志信息输出。1为开启,0为关闭,默认为1

* LogLevel2: 是否开启Suggestive级别的日志信息输出。1为开启,0为关闭,默认为0

* LogLevel3: 是否开启Info级别的日志信息输出。1为开启,0为关闭,默认为0

* Debug: 是否开启调试信息打印。1为开启,0为关闭,默认为0

* VideoInExternal: 启用视频输入回调接口。0为禁用,1为启用。

* VideoOutExternal: 启用视频解码后输出回调接口。0为禁用,1为启用。

* VideoOutExtCmp: 启用视频解码前输出回调接口。0为禁用,1为启用。

* AudioInExternal: 启用音频输入回调接口。0为禁用,1为启用。

* AudioOutExternal: 启用音频解码后输出回调接口。0为禁用,1为启用。

* VideoSoftDecode: 强制使用软件视频解码。1强制使用,0自适应,默认为0

*

* oCtx:[IN] Application上下文。

* 返回值:见‘常量->错误码定义’

*/

public int Initialize(String sInitParam, Context oCtx)

Clean: 实例清理函数

/**

* 描述:播放器模块清理,释放所有资源。

* 阻塞方式:非阻塞,立即返回。

*/

public void Clean()

Start: 开始播放媒体文件

/**

* 描述:开始播放媒体文件。

* 阻塞方式:非阻塞,立即返回。

* sFilePath:[IN] 媒体文件的路径(必须为 *.avi, *.mp4, *.mov格式)

* nodeView:[IN] 视频播放显示的SurfaceView对象或者视频帧外部输出的ViewID。

* 1) 视频帧数据直接在SDK内部进行图像显示时传入SurfaceView对象,

* 通过pgLibLiveMultiView.Get()获取SurfaceView对象。

* 2) 视频帧数据通过回调接口输出到SDK外部处理时,传入Integer类型的ViewID。例如:

* Integer ViewID = Integer.valueOf(1);

* 在通过扩展回调接口输出视频数据时,这个ViewID就是视频输出回调函数pfnVideoOutOpen()

* 的uDevNO参数。请参考《Peergine 扩展设备输入输出C接口说 x.x.doc》文档。

*

* 返回值:见‘常量->错误码定义’

*/

public int Start(String sFilePath, Object nodeView)

Stop: 停止播放媒体文件

/**

* 描述:停止播放媒体文件。

* 阻塞方式:非阻塞,立即返回。

* sFilePath:[IN] 媒体文件的路径

* 返回值:见‘常量->错误码定义’

*/

public void Stop(String sFilePath)

Pause: 暂停或继续播放媒体文件

/**

* 描述:暂停或继续播放媒体文件。

* 阻塞方式:非阻塞,立即返回。

* sFilePath:[IN] 媒体文件的路径

* bFlag: [IN] 标志;true: 暂停播放,false: 继续播放

* 返回值:见‘常量->错误码定义’

*/

public int Pause(String sFilePath, boolean bFlag)

Seek: 跳转播放媒体文件

/**

* 描述:跳转播放媒体文件

* 阻塞方式:非阻塞,立即返回。

* sFilePath:[IN] 媒体文件的路径

* iPosition:[IN] 跳转到的帧号位置,范围为:0 ~ 总帧数

* 返回值:见‘常量->错误码定义’

*/

public int Seek(String sFilePath, int iPosition)

VideoModeSize: 重新定义视频分辨率模式的尺寸

/**

* 描述:重新定义指定视频分辨率模式的尺寸。

* 此函数调用时机:

* 在Initialize()调用之后,Start()调用之前。

* 阻塞方式:非阻塞,立即返回。

* iMode:[IN] 需要重新定义尺寸的视频分辨率模式。

* iWidth:[IN] 视频的宽(像素)。

* iHeight:[IN] 视频的高(像素)。

* 返回值:见‘常量->错误码定义’

*/

public int VideoModeSize(int iMode, int iWidth, int iHeight)

VideoShowMode: 视频图像显示模式

/**

* 描述:视频图像显示模式。

* 阻塞方式:非阻塞,立即返回。

* iMode:[IN] 图像显示模式。0为裁剪,1为整幅,2为拉伸。

* 返回值:见‘常量->错误码定义’

*/

public int VideoShowMode(int iMode)

Version: 获取本模块的版本

/**

* 描述:获取本模块的版本。

* 阻塞方式:非阻塞,立即返回。

* 返回值:版本信息

*/

public String Version();

4)上报事件的参数:

PlayStart:开始播放媒体文件

sAction: PlayStart

sData: 格式为:file=媒体文件路径&frmrate=帧率&frmcur=当前播放的帧号&frmtotal=媒体文件的总帧数

sParam: 无

PlayProgress:媒体文件播放进度(500毫秒上报一次)

sAction: PlayProgress

sData: 格式为:file=媒体文件路径&frmrate=帧率&frmcur=当前播放的帧号&frmtotal=媒体文件的总帧数

sParam: 无

PlayStop:结束播放媒体文件

sAction: PlayStop

sData: 格式为:file=媒体文件路径&frmrate=帧率&frmcur=当前播放的帧号&frmtotal=媒体文件的总帧数

sParam: 无

5.视频显示的SurfaceView控制类(Java类com.peergine.android.livemulti.pgLibLiveMultiView)

1)函数声明:

Get: 获取视频播放SurfaceView对象

/**

* 获取视频播放SurfaceView对象。

* 使用结束后必须使用Release()函数释放,避免资源泄漏。

* sViewID:[IN] View ID,用户定义的一个字符串,用于标识一个View。

* 传入相同的View ID获取到的SurfaceView对象是同一个的。

* 返回值:SurfaceView对象。如果失败,则返回null

*/

public static SurfaceView Get(String sViewID)

Release: 释放销毁视频播放SurfaceView对象

/**

* 释放销毁视频播放SurfaceView对象

* View:[IN] 通过Get()函数获取到的SurfaceView对象。销毁后的SurfaceView对象不能再引用。

*/

public static void Release(SurfaceView View)

6. 修改记录:

序号 修改内容 版本
1 初稿 1.0
2 Initialize()的sInitParam参数增加BufSize和Digest选项 1.1
3 增加采集端的API接口编程参考 1.2
4 修改播放端的VideoStart()、VideoParam()、AudioStart()和AudioParam()的参数描述错误 1.2
5 增加初始化的SingleMode和AloneRenID选项 1.3
6 增加播放端发言控制选项SpeechSelf和SpeechPeer 1.5
7 ForwardAlloc改名为VideoForwardAlloc

ForwardFree改名为VideoForwardFree

1.6
8 增加采集端的RenderEnum函数 1.7
9 采集端增加RenderConnected() 函数

播放端增加 Connected() 函数

采集端Initialize()的sInitParam参数增加SocketInitWnd选项

采集端AudioStart() 和AudioParam() 的sParam增加MuteGate和EchoCancel选项

播放端AudioStart() 和AudioParam() 的sParam增加MuteGate和EchoCancel选项

1.8
10 播放端AudioStart()的sParam参数增加RenderSpeech选项

采集端和播放端Initialize函数的sInitParam参数增加LoginDelayMax选项

采集端增加RecordStart() 和RecordStop() 函数

1.9
11 播放端增加Reject事件 1.10
12 VideoStart()的sParam参数增加FrameStat选项 1.11
13 采集端和播放端Initialize函数的sInitParam参数增加LogLevel0、LogLevel1、LogLevel2、LogLevel3和Debug选项 1.12
14 播放端AudioStart()的sParam参数增加Delay选项

播放端增加AudioSyncDelay()函数。

1.13
15 采集端Initialize()的sInitParam参数增加EncryptMsg、LoginDelayInterval选项。

采集端VideoStart()的sParam参数增加Encrypt选项。

采集端AudioStart()的sParam参数增加Encrypt选项。

播放端Initialize()的sInitParam参数增加EncryptMsg、LoginDelayInterval选项。

播放端VideoStart()的sParam参数增加Encrypt选项。

播放端AudioStart()的sParam参数增加Encrypt选项。

1.15
16 采集端和播放端Initialize函数的sInitParam参数增加DnsRandom、DnsUseIPv4和DnsUseIPv6选项。

采集端和播放端VideoStatus事件的sData参数,增加frmkeycount关键帧计数参数。

采集端的FilePutRequest()和FileGetRequest()声明作废。

1.16
18 采集端VideoStart()的sParam参数增加Playback、Path回放视频文件的选项

采集端VideoParam()的sParam参数增加Pause、Seek回放视频文件的控制选项。

采集端和播放端VideoStatus事件的sData参数,增加frmtotal参数(回放视频文件的总帧数)。

1.17
19 采集端和播放端Initialize函数的sInitParam参数增加VideoSoftEncode、VideoSoftEncode选项。

采集端和播放端增加RecordStopVideo和RecordStopAudio事件。

1.18
20 采集端VideoStart()的sParam参数增加SendCache选项 1.19
21 采集端VideoStart()的sParam参数增加InRotate选项

播放端VideoStart()的sParam参数增加OutRotate、OutMirror选项

1.20
22 增加媒体文件播放器功能的API说明。

播放端增加FileGetRequest2和FilePutRequest2两个函数,支持指定传输文件的起始位置,可以用于实现断点续传。

1.21
23 播放端增加FileGetRequest2和FilePutRequest2两个函数,支持指定传输文件的起始位置,可以用于实现断点续传。 1.22

发表评论

邮箱地址不会被公开。 必填项已用*标注

6 + 3 =