kurento 6.14.0文档翻译 第六章(第一部分) 教程

时间:2024-04-12 16:41:59

这个章介绍怎样使用kurento框架构建不同类型的WebRtc和多媒体应用。

--------------------------------------------------------

提示:这些教程是出于学习目的而创建的,他们没有全面的错误处理,或者任何一种复杂的会话管理,所以这个不要用于生产环境,这只是展示学习的代码例子,只是为了达到学习的效果,不然后果自负

------------------------------------------------------

这些教程有三种风格

1.Java使用客户端应用与springboot应用程序相互作用,负责协调客户端之间的通信并控制Kurento Media Server功能的逻辑

运行java版本,你需要安装JDK和Maven

sudo apt-get update && sudo apt-get install --no-install-recommends --yes \

git \

default-jdk \

maven

Java版是基于spingboot之上的,所以他们已经包括全面服务应具备的功能,比如web服务和日志的支持

Springboot也可以创建可执行的jar,一个独立的可执行的程序包这个可执行可以提供命令行像start、stop或者restart,所以它可以与init.d(系统V)和systemd用作系统服务,更多有关的信息可以看springboot文档(https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment-service)和在线资料如stack overflow 问答。

2.浏览器javascipt:应用程序在浏览器内执行和与kurento媒体服务进行交互,这个教程的所有逻辑都在浏览器,不需要应用服务

3.Node.js:客户端与服务器交互使用Node.js技术,这个应用服务包括协调客户端的通信与控制kurento媒体服务

提示:这个教程使用WebRTC必须要使用HTTPS,接下来介绍关于怎么启用安全(加密)的应用程序

 

6.1 hello world

这是一个使用kurento创建的简单的WebRTC应用,它实现了一个WebRTC回环(WebRTC媒体流从客户端到服务器又返回到客户端)

6.1.1kurento java教程—hello world

这个web应用程序设计成为java开发者介绍使用kurento应用的原理,它包括一个webrtc视频通信的回环,这个教程是假设你有基本的java、javascript、html、webrtc知识,我们推荐在开始这一章之前你读过 关于kurento和webrtc(ps:第一章)

提示:这个程序是使用https,它可以在本地主机运行的很好,并在浏览器有一个安全的异常信息,但是如果远程运行,则需要保护你的应用的安全,更多相关信息可以跳转到(配置java服务使用HTTPS)

 

快速开始

接下来这些步骤就是运行一个演示程序

  1. 安装kurento媒体服务(ps:可以查看第四章)
  2. 运行以下命令

git clone https://github.com/Kurento/kurento-tutorial-java.git

cd kurento-tutorial-java/kurento-hello-world

git checkout master

mvn -U clean spring-boot:run\ -Dspring-boot.run.jvmArguments="-Dkms.url=ws://{KMS_HOST}:8888/kurento"

  1. 用浏览器(chrome,firefox)打开演示页面https://localhost:8443/
  2. 点击开始按钮
  3. 同意访问你的摄像头
  4. 不久环回连接协商并连接,你应该可以看到你的网络摄像头视频来自于本地和远程
  5. 点击停止结束这个演示

理解这个例子

Kurento给开发者提供一个kurento java客户端控制kurento媒体服务,客户端库任何类型的java程序:web服务、桌面应用,android等,它也可以与其它如javaee,spirng,play,vert.x swing 和javafx等框架组合。

Hello world是一个简单用kurento创建的web应用,以下的图片是这个演示程序的截图。

kurento 6.14.0文档翻译 第六章(第一部分) 教程

                         Kurento helloworld截图:webrtc环回

这个应用(一个html页面)由两个html5<video>标签组成:一个显示本地视频流(来源网络摄像头)另一个显示来源于媒体服务回传的远程流。

这个应用的逻辑很简单,本地流发送到kurento媒本服务,服务不修改的回传该流,实现这个行为,我们需要创建由单个媒体元素组成的媒体管道,比如WebRtcEndpoint,它具有交换webrtc媒体流的全双工能力(双向的),该媒体元素已连接到自身,以便发送(从浏览器)

接收到的媒体返回(至浏览器),下图说明了这个媒体管道

kurento 6.14.0文档翻译 第六章(第一部分) 教程

这是一个web应用,是C/S架构,在客户端这边使用javascript实现逻辑,在服务器使用springboot基本服务控制kurento

Java客户端API可以提供控制kurento媒体服务能力,总而言之,这演示了高级架构的三层,为了传送这些实体,使用了两个websocket:

  1. 一个websocket用于连接Kurento Java客户端与应用服务之间的信令传输
  2. 另一个WebSocket用于执行Kurento Java客户端和Kurento媒体服务器之间的通信

通信使用kurento协议,kurento协议更详细的信息可以查看kurento协议章(ps:第16章)

下面的图显示以下三个之间的完整的序列图1)客户端接口(javascript)2)应用服务(springboot程序)3)kurento媒体服务器(kurento media server)

kurento 6.14.0文档翻译 第六章(第一部分) 教程

kurento 6.14.0文档翻译 第六章(第一部分) 教程

接下的来章节将分析应用服务(java)和客户端(javascript)应用的代码,完整源码可以在github上找到(https://github.com/Kurento/kurento-tutorial-java/tree/master/kurento-hello-world

 

应用服务的逻辑

这个演示程序服务器是基于springboot框架的java语言开发的,内嵌一个tomcat服务器,从而简化了开发部署过程。

提示:您可以使用您喜欢的任何Java服务器端技术来通过Kurento构建Web应用程序,比如一个javaee程序,SIP的servlet,play,vert.x等,我们选择了springboot

接下来你可以看到应用服务端的类图

kurento 6.14.0文档翻译 第六章(第一部分) 教程

这个演示程序的启动类是HelloWorldApp

你可以看到这个KurnetoClient在HelloWorldApp被当成springbean实例化,这个bean被用于创建kurento媒体管道,当它用于媒体能力添加到应用程序内,在此实例中,我们看到需要为客户端库指定Kurento 媒体服务的位置。在这个例子我们假设它是本地主机,监听8888端口,如果你重新开发这个例子你需要插入你kurento媒体服务的位置。

一旦这个kurento 客户端被实例化,你已经有与kurento媒体服务通信和控制的能力。

@SpringBootApplication

@EnableWebSocket

public class HelloWorldApp implements WebSocketConfigurer {

@Bean

public HelloWorldHandler handler() {

return new HelloWorldHandler();

}

@Bean

public KurentoClient kurentoClient() {

return KurentoClient.create();

}

@Override

public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {

registry.addHandler(handler(), "/helloworld");

}

public static void main(String[] args) throws Exception {

SpringApplication.run(HelloWorldApp.class, args);

}

}

这个web应用是一个单页面架构(SPA),使用一个websocket与应用服务进行通信,意思是请求和响应,特别这个主app类实现了WebSocketConfigurer接口,在路径/ helloworld中注册处理WebSocket请求的WebSocketHandler

HelloWorldHandler类实现了TextWebSocketHandler处理websocket请求,这个类的中间部分有handleTextMessage方法,这个方法实现了请求操作,通过websocket返回响应信息,换句话说它实现了上一个序列图所描述信令部分。(ps:第一个websocket)

kurento 6.14.0文档翻译 第六章(第一部分) 教程

start()方法执行了以下操作: