简介

P2P双向视频通话SDK是由深圳市穿透科技有限公司(以下简称穿透科技)开发软件SDK。可以实现一对多视频直播(单向)和一对一视频对讲(双向)。

产品特点

  • 支持音视频通过P2P的方式传输。
  • 支持多种视频分辨率。
  • 支持H264,H265等视频传输格式。
  • 支持PCM的音频传输格式。

应用场景

  • 视频通话:可实现类似微信一样的一对一或多人视频通话。
  • 视频直播:一对多视频直播和音频会议。

产品规格

 规格项规格说明
功能规格回音消除对讲时消除减轻音频回音,使音频更清晰
硬件加速 使用GPU等硬件来进行视频编解码、合成的加速
H.264 应用最广的高性能视频编码器
H.265 更高压缩比、更节省带宽的视频编码器
参数规格最大采集分辨率可设置,不建议超过1080P
最大传输分辨率 可设置,不建议超过1080P
最大码率 可设置,不建议过大
最大帧率 可设置,不建议超过30fps

平台兼容性

规格/平台/ 功能规格 AndroidiOSWeb
回音消除
硬件加速
H.264编码
H.265编码

与P2P视频直播SDK、P2P会议SDK的区别

P2P视频双向对讲SDK具有P2P直播SDK的全部功能:

采集端采集视频,可以被多个播放端同时播放。

播放端也可以采集视频,只能传输给采集端播放。

P2P直播视频双向对讲视频流向图

P2P直播SDK采集端采集的视频可以被多个播放端同时播放,视频流是单向的。

P2P直播SDK视频流向图

(图2)直播模块SDK视频流向图

P2P会议模块视频流向,会议SDK视频流是双向的,两两个节点之间都可以相互打开视频。


(图3)P2P会议模块SDK视频流向图

准备工作

准备工作

    P2P双向视频对讲SDK基于P2P视频直播SDK,都基于穿透科技Peergine中间件开发,所以最好可以了解Peergine中间件的节点对象、组对象和音视频对象。

    其次需要数据P2P视频直播的API和编程方式。了解异步编程。P2PSDK都是使用异步的方式调用和反馈。反馈是通过注册总的回调实现的。

使用流程图

图(4)ExtVideo使用流程图。

术语说明

ExtVideo:是指P2P视频对讲扩展模块,也只实现这个功能的Java类ExtVide.java;

采集端:是指P2P直播模块中负责采集视频的设备和程序;(DemoCaptureMulti)

播放端:是指P2P直播模块中负责播放视频的设备和程序;(DemoRenderMulti)

设备端:一般指特殊设备,集成了直播模块采集端的设备;

手机端:一般指手机设备,集成了直播模块播放端的设备。

Demo使用

使用流程

  • 1) 安装运行: 安卓可以直接安装DemoApp文件夹下的APK,IOS需要用XCODE打开工程编译安装。
  • 2)登录进入主界面:采集端输入穿透科技分配的ID,播放端可输入任意字符串作为ID即可登录,播放端ID建议不要使用和别人相同的ID。
  • 3)管理对端列表:可以添加删除对端ID列表,播放端添加采集端ID,采集端添加播放端ID。
  • 4)呼叫:点击显示的ID进入呼叫界面。
  • 5)对讲:呼叫对端后对端如果在主界面会弹出对话框是否接受对讲,点击接受后进入对讲界面。
  • 6)挂断:点击挂断按钮就能挂断对讲。退回主界面。

Demo程序流程结构

图(5)Demo2.0程序调用流程图。

前提条件

ANDROID

请确保满足以下开发环境要求:

  • Android SDK API Level Level ≥ 15
  • Android Studio 3.0 或以上版本
  • App 要求 Android 4.1 或以上设备

IOS

请确保满足以下开发环境要求:

  • Xcode 10.0+
  • iOS 8.0+ 真机(iPhone 或 iPad)
  • 请确保您的项目已设置有效的开发者签名

WebHtml5

请确保满足以下开发环境要求:

  • 操作系统: Microsoft Windows 7+
  • 安装Chrome 75+浏览器
  • 安装 pgHtml5Bridge 后台服务插件
  • 确保部署环境为localhost或http协议

添加SDK

ANDROID

  • 下载 Android SDK
  • Import Module 导入安卓支持库: ExtVideolivemultipgPluginLib,并添加到你的工程Module的依赖中
  • 后期升级是替换
    ExtVideolivemultipgPluginLib 中的java、jar、so等文件。
  • 配置环境AndroidManifest.xml 添加下列代码:

build.gradle添加下列代码

现在你已经设置好了 Android Studio 开发环境,可以开始使用 Android SDK 了!

IOS

  • 下载 IOS SDK,解压并打开。
  • 将文件夹 ExtVideo拷贝到创建的工程。
  • 将文件夹 pgDybLiveMulti_device.framework
    pgDybLiveMulti.framework
    pgDybLiveMulti_simulator.framework 拷贝并添加
    pgDybLiveMulti.framework 到工程依赖。
  • pgDybLiveMulti_device.framework :包含arm和arm64架构,老版有这个framework,新版已经删除,改名为 pgDybLiveMulti.framework
    pgDybLiveMulti_simulator.framework :最新SDK带的framework,其中包含arm和arm64以及x86-64架构,用于模拟器调试;即需要发布到App Store时将 pgDybLiveMulti_device.framework 改名为 pgDybLiveMulti.framework ,需要模拟器调试时 pgDybLiveMulti_simulator.framework 改名为 pgDybLiveMulti.framework
  • 后期升级可以替换ExtVideo中的.mm文件和替换*.framework
  • 在BuildSetting的Other Link Flags参数中增加:-liconv -lz -lresolv链接选项。
  • 禁止使用bitcode
  • 工程中引用
    ExtVideo 文件夹下的所有源文件。
  • 添加一系列的系统framework
CoreVideo.framework
CoreAudioKit.framework
UIKit.framework
AdSupport.framework
CoreGraphics.framework
CoreMedia.framework
AVFoundation.framework
AudioToolbox.framework

现在你已经设置好了 XCode 开发环境,可以开始使用 IOS SDK 了!

Web HTML5

  • 下载 Web HTML5 SDK,解压并打开。
  • 拷贝并引用 js/pgLibExtVideo.js
  • 拷贝并引用 js/pgLibLive*.js 相关文件
  • 拷贝并引用 js /pgHtml5Bridge.js
  • 安装SDK包中附带的pgHtml5Bridge服务程序
  • 后期升级时需要安装最新的
    pgHtml5Bridge 以及替换相关的js文件

现在你已经设置好了 Web开发环境,可以开始使用Web HTML5 SDK 了!

调试指南和常见问题

  1. 直播模块详细文档在pgLiveDoc目录下,ExtVideoAPI详细介绍在ExtVideojavaApiDoc目录下。ExtVideo是开源代码,API功能和参数说明以代码注释为准。
  2. 初始化失败,检查是否添加了网络权限,检查是否导入并implementation集成了Module pgPluginLib
  3. 上报常见登录错误:

错误码12,一般是网络连接失败,超时,请检查网络环境问题。

错误码8,请输入正确的ID。输入已经注册的ID。

  1. 关于预览或者音频有时不能打开的问题。

预览不能打开最可能是是没有打开摄像头的权限,请先检查摄像头权限是否给了Demo。

音频不能打开,或者某一端没有声音,先检查没有声音的对端的Demo是否有录音权限。

  1. 关于对讲的播放端预览打开了,但是采集端看不到播放端视频的情况可能的问题及处理办法。
  2. 可1:是没有点击获取按钮并进行确认,这种情况下是某种通道没有建立,所以按对讲后不能进行视频对讲。
  3. 可能2:有多个相同的ID的播放端,因为历史原因,直播模块的播放端初始化ID和内部的实际ID是不同的。所以通过初始化ID查找,可能会找到多个播放端。于是可能在“获取”过程中,后响应的播放端的视频通道会覆盖前面的通道,导致播放端视频不能传到采集端。
  4. 可能3: 播放端没有摄像头权限,表现为播放端预览是黑屏状态。
  5. 为什么使用connect.peergine.com:7781 的服务器可以正常双向对讲,使用自建P2P服务器地址只能单向对讲,不能双向对讲?

是因为直播双向对讲模块需要依赖一个服务器转发消息的插件,请联系穿透科技工程是帮助安装。

进阶教程

怎样修改播放端到采集端视频的分辨率?

在P2P SDK中分辨率由视频参数Mode表示,我们定义的常用视频分辨率Mode分别是:

所以我们要修改ExtVideo的分辨率,需要注意的是ExtVideo两端都要修改成一致才能生效:

ExtVideoAPI说明

发表评论

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

+ 55 = 56