精华内容
下载资源
问答
  • kurento-docker, kurento项目的Dockerfiles 版权所有 © 2013 -2016 Kurento 。 在许可协议许可下许可。 kurento-docker用于 Docker 容器的Kurento实用程序。什么是 KurentoKurento是一个开源软
  • Kurento 音视频

    2019-05-17 18:20:13
    kurento 移动端 iOS 源码,能够正常跑通音视频。kurento官网是:http://www.kurento.org/ kurento文档:https://doc-kurento.readthedocs.io/en/6.10.0/ 。 安装好服务端,修改 iOS源码对应的网址( kWebSocketUrl )...
  • 13.1 Kurento API 参考Kurento媒体服务器提供了一套API给高级语言使用,以用于应用程序开发人员来控制它。这些API可以被用于Java或Javascript开发的Kurento 客户端。如果你更喜欢其它开发语言,你可以使用基于...

    13.1 Kurento API 参考

    Kurento媒体服务器提供了一套API给高级语言使用,以用于应用程序开发人员来控制它。

    这些API可以被用于Java或Javascript开发的Kurento 客户端。

    如果你更喜欢其它开发语言,你可以使用基于WebSocket或JSON-PRC的Kurento协议。

    在下面的章节中,我们将讲解Kurento API, 我们将显示Kurento媒体服务器提供给客户端的媒体能力。

    如果你想看使用kurento的工作DEMO,你可以翻到前面看示例教程。

    13.1.1 媒体元件和媒体管道

    对于应用程序开发人员来说,Kurento提供了两个概念来作为构建模块:

    >>> 媒体元件

    媒体元件是对媒体流执行指定动作的功能单元。

    对于应用程序开发人员来说,媒体元件是每个能力的一种实现方式,它表示为自包含的"黑箱",

    开发人员在使用时,不需要理解底层的实现细节。

    媒体元件具有从其它元件(通过媒体源)接收媒体以及发送媒体到其它元素(通过媒体sink)的能力。

    依赖于它们的能力,媒体元件可划分成不同的类型:

    – 输入端点:

    指具有接收媒体并注入到管道能力的媒体元件。

    有多种类型的输入端点。

    文件输入端点用来从文件获取媒体;

    网络输入端点用来从网络获取媒体;

    捕捉输入端点有直接从摄像头或其它类型的硬件源上捕捉媒体流的能力。

    – 滤镜:

    指负责媒体转码或分析的媒体元件。

    因此,滤镜的功能包括混合流,混间,分析,填充等。

    – 集线器:

    指负责管理一个管道中多个媒体流的媒体对象。

    一个集线器可以有多个集线端口,以连接多个媒体元件。

    依据集线类型,可以有多种方式来控制媒体。

    例如,Composite集线器可以将多个输入视频流合并到一个唯一的输出视频流。

    – 输出端点:

    指具有将媒体流从管道中输出的能力的媒体元件。

    因此,也有多种类型的输出端点,如文件,网络,屏幕等。

    >>> 媒体管道:

    媒体管道是一个媒体元件的链,

    在这个链中,输出流是由一个源元件输入到一个或多个其它媒体元件处理后再输出的。

    因此,管道表示能执行一系列流操作的机器。

    Figure 13-1: 媒体管道示例,

    实现了从一个WebRtcEndpoint接收媒体流,

    叠加一个图像到侦测到的人脸上并返回结果流的交互式多媒体应用

    Kurento API是面向对象的API.

    因此,有一些类需要实例化。这些类定义的操作可以被这个类的对象所引用 。

    这些类和其它相关类是继承关系,继承操作是从父类到子类的。

    下面的类图显示了Kurento API中主类的关系。

    Figure 13.2: Class diagram of main classes in Kurento API

    从图中可以看出,

    Endpoint, Filter,HubPort的父类是MediaElement,

    而媒体元件、媒体管道,集线器的父类都是MediaObject.

    另外,媒体管道可拥有多个媒体元件,

    Hub可以拥有多个HubPort,

    而MediaObject可以拥有一个媒体管道。

    13.1.2 端点

    先来讨论Kurento提供的不同种类的端点。

    >>> WebRtcEndpoint

    是一种有输出和输入的端点,它通过Web为RTC(Real Time Communictions)提供媒体流。

    它为浏览器间的通信实现了WebRTC技术。

    图示:

    >>> RtpEndpoint

    是一种有输出和输入的端点。

    它为两个远程的网络节点,通过RTP协议,提供双向的内容传输能力。

    正如你所想的,为了通过网络发送和接收媒体,它使用了RTP协议,并使用SDP做媒体协商;

    图示:

    >>> HttpPostEndpoint

    是一种只有输入的端点,

    它使用http POST请求,就像HTTP文件上传功能那样,接收媒体流。

    图示:

    >>> PlayerEndpoint

    是一种只有输入的端点,

    它从文件系统,Http URL或RTSP URL接收内容并将其注入到媒体管道中。

    图示:

    >>> RecorderEndpoint

    是一种只有输出的端点。

    它提供了以可靠模式存储内容的功能,它为音频和视频提供了媒体sink衬垫(pad)。

    图示:

    下面的类图显示了主要的端点类的关系:

    Fig 13-3

    13.1.3 滤镜

    滤镜是执行媒体处理,机器视觉,虚拟现实等的媒体元件。

    我们来看看Kurento提供的滤镜:

    >>> The ZBarFilter filter

    检查视频流的QR和条形码。

    当发现有条形码时,滤镜会触发CodeFoundEvent事件,客户端可以添加一个对这个事件的监听器并执行相应的动作。

    >>> The FaceOverlayFilter filter

    检查视频流中的人脸,并在人脸上叠加一个可设置的图片。

    >>> GStreamerFilter

    它是一个通用的滤镜接口,它能使Kurento媒体管道使用GStreamer滤镜。

    下面的类图显示了主要的滤镜类的关系:

    Figure 13.4: Class diagram of Filters in Kurento API

    13.1.4 集线器

    集线器是负责管理管道中多媒体流的媒体对象。

    一个集线器可以有多个连接其它媒体元件的集线端口,

    我们来看下Kurento提供的集线器:

    >>> Composite

    是一个混合多个输入的音频流,并与视频流组成的下网格的集线器。

    图示:

    >>> DispatcherOneToMany

    是发送指定输入流到多个连接的输出集线端口的集线器。

    图示:

    >>> Dispatcher

    是一个允许在任意输入-输出集线端口对做路由的集线器。

    图示:

    下面是集线器的类关系图:

    Figure 13.5: Class diagram of Hubs in Kurento API

    Kurento Client的细节可以看文档 JavaDoc/JsDoc:

    .  kurento-client-java : JavaDoc of Kurento Java Client.

    链接见:https://www.kurento.org/docs/6.0.0/langdoc/javadoc/index.html

    .  kurento-client-js : JsDoc of Kurento JavaScript Client.

    .  kurento-utils-js : JsDoc of an utility JavaScript library aimed to simplify the development of WebRTC applications.

    展开全文
  • Kurento官方文档

    2018-06-02 13:49:09
    Kurento官方文档(英文版),包括Kurento的入门、安装指南及教程等
  • Kurento协议

    千次阅读 2018-04-27 18:03:24
    Kurento应用开发指南(以Kurento 6.0为模板) 之八: Kurento协议 转载 2017年02月06日 15:04:48 标签: 279 编辑 删除 14.1 Kurento协议 Kurento媒体服务器可以被两种外部Kurento客户端控制,如Java或...

    Kurento应用开发指南(以Kurento 6.0为模板) 之八: Kurento协议

    转载 2017年02月06日 15:04:48

    • 标签:

    14.1 Kurento协议
    Kurento媒体服务器可以被两种外部Kurento客户端控制,如Java或JavaScript。
    这些客户端使用Kuernto协议来和KMS通信。
    Kurento协议是基于WebSocket协议,并使用了JSON-RPC V2.0 消息来提交请求和发送响应。

    14.1.1 JSON-RPC 消息格式

    Kurento协议使用JSON-RPC V2.0 编码它的消息,下面的章节将讨论如何在JSON消息中使用这种格式。


    >>> Request 消息
    一个RPC调用可以表示为向服务端发送一个Request消息,Request消息有下列成员变量:
     . jsonrpc: 
       指定JSON-RPC协议的版本的字符串,它必须是"2.0".
     . id: 
       由客户端建立的唯一标识符,包含一个字符串或数字。
       服务端必须在Response消息中以相同的值回复。
       这个成员变量被用于在两个消息间地内容进行关联。
     . method: 
       被激活方法名
     . params: 
       a structured value that holds the parameter values to be used during the invocation of the method.
       用于被激活方法的结构体,它包含了参数值。


    下面的JSON显示了一个示例请求的格式:
    {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "create",
        "params": {
            "type": "PlayerEndPoint",
            "constructorParams": {
                "pipeline": "6829986",
                "uri": "http://host/app/video.mp4"
            },
            "sessionId": "c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    >>> 成功的响应消息
    当一个RPC调用让服务端回复一个响应消息时,
    如果是一个成功的响应,那么响应消息将包含如下成员变量:
     . jsonrpc:
       指定JSON-RPC协议的版本的字符串,它必须是"2.0".
     . id: 
       它强制性地和请求消息中的id值一致。
     . result: 
       它的值是由服务端被激活的方法来确定的。
       如果连接被拒绝,它返回一个拒绝属性的消息,
       拒绝属性包含了消息代码,以及为什么session被拒绝,并且不会有被定义的sessionId。
       
    下面是一个成功响应示例:
    {
        "jsonrpc": "2.0",
        "id": 1,
        "result": {
            "value": "442352747",
            "sessionId": "c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    >>> 出错的响应消息
    当一个RPC调用让服务端回复一个响应消息时,
    如果是一个出错的响应,那么响应消息将包含如下成员变量:
     . jsonrpc: 
       指定JSON-RPC协议的版本的字符串,它必须是"2.0".
     . id:
       它强制性地和请求消息中的id值一致。
       如果检测到请求消息中id是错误的(如错误或无效的请求),它就为空。
     . error: 
       一个消息,通过下面成员变量来描述这个错误:
       – code: 
          标识遇到的错误类型的整数值。
       – message: 
          错误的简单描述
       – data:
          原始或结构体的值,包含了关于错误的额外信息。
          它可以被忽略,它的值是由服务端定义的。
    下面显示了一个典型的出错响应:
    {
        "jsonrpc": "2.0",
        "id": 1,
        "error": {
            "code": "33",
            "message": "Invalid paramter format"
        }
    }


     

    14.1.2 JSON-RPC之上的Kurento API 

    如在Kurento API章节所述,Kurento媒体服务器提供了一套完整成熟的API,让应用程序以多种方式处理媒体。


    为了使用这些丰富的API, Kurento客户端要求在客户端和服务端之间实现全双式通信。
    基于这个原因,Kurento协议是基于WebSocket传输的。


    在发出命令之前,Kurento客户端需要先请求和Kurento媒体服务器的URL: ws://hostname:port/kurento建立WebSocket连接。
    一旦这个WebSocket连接已建立,Kurento协议提供了五种不同的类型的请求/响应消息:
     . create:
       实例化一个新的媒体对象,如管道或媒体元件。
     . invoke:
       调用已创建对象的方法。
     . subscribe: 
       创建对象中的事件订阅。
     . unsubscribe: 
       移除一个事件的订阅。
     . release: 
       删除对象并释放其资源。


    Kurento协议还允许Kurento媒体服务器向客户端发送请求:
     . onEvent: 
       这个请求是在事件发生时,Kurento媒体服务器向客户端发送请求。


    >>> Create messages
    Create消息请求Kurento API的对象的创建。
    参数 type 指定了被创建对象的类型。
    参数 constructorParams 包含了创建该对象需要的所有信息。
    每个消息都需要不同的 constructorParams来创建对象,这些参数是在Kurento API章节中定义的。


    最后,参数sessionId为当前session的标识符。
    这个参数的值是由Kurento Media Server在每次响应时发送给客户端。
    只有第一次的从客户端到服务端的请求不需要这个‘sessionId’(因为这时候客户端还未收到这个值)。


    下面的示例显示了一个Request消息,
    它请求创建一个类型为PlayerEndpoint的对象,它的管道为6829986 ,参数uri: http://host/app/video.mp4,
    sessionId为c93e5bf0-4fd0-4888-9411-765ff5d89b93:
    {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "create",
        "params": {
            "type": "PlayerEndPoint",
            "constructorParams": {
                "pipeline": "6829986",
                "uri": "http://host/app/video.mp4"
            },
            "sessionId": "c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    响应消息中, 在域value中包含了新对象的id。
    消息id还会要被用在协议的其它请求中。
    在前面已经讲过,sessionId要在每个响应中返回。
     
    下面的示例显示了一个创建消息的典型响应:
    {
        "jsonrpc": "2.0",
        "id": 1,
        "result": {
            "value": "442352747",
            "sessionId": "c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    >>> Invoke messages
    Invoke 消息请求对指定对象调用一个操作。
    参数 object    指示了被调用操作的对象的id,
    参数 operation 指示了被调用操作的名称。
    参数 operationParams 包含了执行操作需要的参数。 


    下面的示例显示了一个请求消息,它请求对对象 442352747  执行连接操作,它的参数为 sink 6829986。
    sessionId和session中的所有请求一致:
    {
        "jsonrpc": "2.0",
        "id": 2,
        "method": "invoke",
        "params": {
            "object": "442352747", 
            "operation": "connect",
            "operationParams": {
                "sink": "6829986"
            },
            "sessionId": "c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    当对象中的操作初成功执行后,响应消息将会包含有返回值 。
    如果操作失败,则不会有任何返回值。


    下面的示例显示了当连接操作执行后的典型响应消息:
    {
        "jsonrpc": "2.0",
        "result": {
            "sessionId": "c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        },
        "id": 2
    }


    >>> Release messages
    Release 消息请求释放指定对象。
    参数 object 指定了要释放的对象的id。
    {
        "jsonrpc": "2.0",
        "id": 3,
        "method": "release",
        "params": {
            "object": "442352747",
            "sessionId": "c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    响应消息只包含sessionID, 下面是一个示例:
    {
        "jsonrpc":"2.0",
        "id":3,
        "result": {
            "sessionId":"c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    >>> Subscribe messages
    Subscribe消息请求订阅指定对象的某种类型的事件。
    参数 object 指定了要订阅事件的对象id. 
    参数 type   指定了事件的类型。
    如果客户端订阅了一个对象的某种事件,每次对象的这个事件发生后,
    Kurento Media Server就会使用 onEvent 方法发送一个请求到客户端。
    这种类型的请求会在后面的章节再讲解。


    下面的示例显示了请求订阅对象311861480的 EndOfStream事件,当然,sessionId是必须包括的:


    {
        "jsonrpc":"2.0",
        "id":4,
        "method":"subscribe",
        "params":{
            "object":"311861480",
            "type":"EndOfStream",
            "sessionId":"c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    响应消息包含了订阅标识符,这个值会在后面的解除订阅中要用到。


    下面的示例显示一个订阅请求的响应消息,属性 value 的值包含了订阅id:
    {
        "jsonrpc":"2.0",
        "id":4,
        "result": {
            "value":"353be312-b7f1-4768-9117-5c2f5a087429",
            "sessionId":"c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    >>> Unsubscribe messages
    Unsubscribe 消息请求解除前面事件的订阅。
    参数 subscription 包含了从服务端收到的成功订阅后的订阅id.


    下面的示例显示了解决订阅353be312-b7f1-4768-9117-5c2f5a087429的请求:
    {
        "jsonrpc":"2.0",
        "id":5,
        "method":"unsubscribe",
        "params": {
            "subscription":"353be312-b7f1-4768-9117-5c2f5a087429",
            "sessionId":"c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    响应消息包含了sessionId.
    下面的示例显示了一个解除订阅请求的响应:
    {
        "jsonrpc":"2.0",
        "id":5,
        "result": {
            "sessionId":"c93e5bf0-4fd0-4888-9411-765ff5d89b93"
        }
    }


    >>> OnEvent Message
    当客户端订阅了对象的某类事件后,每当对象的这类事件发生时,服务端都会发送一个onEvent请求。
    这也是为什么Kurento协议要使用Websocket并要在客户端和服务端间使用全双工的工作模式。
    服务端发送到客户端的请求包含了事件的所有信息:
     . data: 
       这类事件的特定信息。
     . source: 
       事件的对象源。
     . type: 
       事件的类型。
     . subscription:
       事件被触发的订阅id.


    下面的显示了服务端发送到客户端的提醒: 
    对象311861480 中,订阅号 353be312-b7f1-4768-9117-5c2f5a087429 发生了EndOfStream 事件。
    {
        "jsonrpc": "2.0",
        "id": 6,
        "method": "onEvent",
        "params": {
            "value": {
                "data":{
                    "source":"311861480",
                    "type":"EndOfStream"
                },
                "object":"311861480",
                "subscription":"353be312-b7f1-4768-9117-5c2f5a087429",
                "type":"EndOfStream",
            },
            "sessionId":"4f5255d5-5695-4e1c-aa2b-722e82db5260"
        }
    }


    响应消息不包含任何有效信息,只是简单的消息模板。
    下面显示了一个典型的 onEvent请求的响应:


    {
        "jsonrpc":"2.0",
        "id":6,
        "result": ""
    }
     

    14.1.3 网络问题

    KMS处理的资源是高消耗的,因此,KMS实现了一个垃圾收集器。
    当客户端断开连接后超过4分钟,媒体元件就会被收集。
    在这个时间后,这些媒体元件会被自动处理。


    因此,客户端和KMS间的websocket连接可以在任何时间激活。
    当网络临时中断中,KMS实现了一个和客户端重连的机制。


    有一种基于上面格式特殊类型的消息,这个消息允许客户端重新连接到前面连接KMS:
    {
        "jsonrpc": "2.0",
        "id": 7,
        "method": "connect",
        "params": {
            "sessionId":"4f5255d5-5695-4e1c-aa2b-722e82db5260"
        }
    }


    如果KMS回应如下:
    {
        "jsonrpc": "2.0",
        "id": 7,
        "result": {
            "sessionId":"4f5255d5-5695-4e1c-aa2b-722e82db5260"
        }
    }
    则表示客户端重新连接到了同一个KMS。
    如果连接到了其它KMS, 则消息如下:
    {
        "jsonrpc":"2.0",
        "id": 7,
        "error":{
            "code":40007,
            "message":"Invalid session",
            "data":{
                "type":"INVALID_SESSION"
            }
        }
    }


    在这种情况下,客户端应该再次调用原始的连接以获得一个新的sessionId:
    {
        "jsonrpc":"2.0",
        "id": 7,
        "method":"connect"
    }


     

    14.1.4 Kurento API

    为了实现一个Kurento客户端,你需要仔细阅读本文档。


    而知道所有细节的最好的方式是查看IDL文件,它定义了Kurento元件的接口。
    我们已经定义了基于JSON的通用IDL格式。
    从它开始,我们为Java和JavaScript生成了客户端代码。
    Kurento API定义了下列IDL文件:
     . KMS core :     https://github.com/Kurento/kms-core/blob/develop/src/server/interface/core.kmd.json
     . KMS elements : https://github.com/Kurento/kms-elements/tree/master/src/server/interface
     . KMS filters  : https://github.com/Kurento/kms-filters/tree/master/src/server/interface
     

    14.1.5 Example: WebRTC in loopback

    本章节描述了Kurento客户端和Kurento Media Server实现了下WebRTC回话功能的消息交互。
    它完整地展示了教程中的过程 ,步骤如下:


    step1. 客户端发送一个创建媒体管道的请求消息:
    {
        "id":1,
        "method":"create",
        "params":{
            "type":"MediaPipeline",
            "constructorParams":{}
        },
        "jsonrpc":"2.0"
    }


    step2. KMS回应一个包含有媒体管道ID和媒体会话ID(sessionId)的响应消息:
    {
        "id":1,
        "result":{
            "value":"c4a84b47-1acd-4930-9f6d-008c10782dfe_MediaPipeline",
            "sessionId":"ba4be2a1-2b09-444e-a368-f81825a6168c"
        },
        "jsonrpc":"2.0"
    }


    step3. 客户端发送一个创建WebRtcEndpoint的请求:
    {
        "id":2,
        "method":"create",
        "params":{
            "type":"WebRtcEndpoint",
            "constructorParams":{
            "mediaPipeline":"c4a84b47-1acd-4930-9f6d-008c10782dfe_MediaPipeline"
        },
        "sessionId":"ba4be2a1-2b09-444e-a368-f81825a6168c"
        "jsonrpc":"2.0"
    }


    step4. KMS创建一个WebRtcEndpoint,并回给客户端这个媒体元件的标识符:
    {
        "id":2,
        "result":{
        "value":"c4a84b47-1acd-4930-9f6d-008c10782dfe_MediaPipeline/e72a1ff5-e416-48ff-99ef-02f7fadabaf7_"sessionId":"ba4be2a1-2b09-444e-a368-f81825a6168c"
        },
        "jsonrpc":"2.0"
    }


    step5. 客户端调用WebRtcEndpoint的连接原语来创建一个回放:
    {
        "id":3,
        "method":"invoke",
        "params":{
            "object":"c4a84b47-1acd-4930-9f6d-008c10782dfe_MediaPipeline/e72a1ff5-e416-48ff-99ef-02f7fadabaf7_"operation":"connect",
            "operationParams":{
                "sink":"c4a84b47-1acd-4930-9f6d-008c10782dfe_MediaPipeline/e72a1ff5-e416-48ff-99ef-02f7fadabaf7_},
                "sessionId":"ba4be2a1-2b09-444e-a368-f81825a6168c"
            },
        "jsonrpc":"2.0"
    }


    step6. KMS执行连接并回应这个操作:
    {
        "id":3,
        "result":{
        "sessionId":"ba4be2a1-2b09-444e-a368-f81825a6168c"
        },
        "jsonrpc":"2.0"
    }


    step7. 客户端调用WebRtcEndpoint的processOffer原语来进行WebRTC的SDP协商:
    {
        "id":4,
        "method":"invoke",
        "params":{
            "object":"c4a84b47-1acd-4930-9f6d-008c10782dfe_MediaPipeline/e72a1ff5-e416-48ff-99ef-02f7fadabaf7_"operation":"processOffer",
            "operationParams":{
                "offer":"SDP"
            },
            "sessionId":"ba4be2a1-2b09-444e-a368-f81825a6168c"
        },
        "jsonrpc":"2.0"
    }


    step8. KMS执行SDP协商并返回SDP回答:
    {
        "id":4,
        "result":{
        "value":"SDP"
        },
        "jsonrpc":"2.0"
    }
     

    14.1.6 Kurento Module Creator

    默认的Kurento客户端(java和JavaScript)是使用一个叫作 Kurento Module Creator的工具创建的。
    因此,这个工具同样可以被用来创建基于其它语言的定制化客户端。


    Kurento Module Creator在Ubuntu机器上使用如下命令安装:
      $ sudo apt-get install kurento-module-creator


    这个工具的目的是为了生成客户端代码,以及生成服务端需要的glue代码。
    对于代码生成,它通常使用Freemarker 作为模板引擎。
    通常的使用Kurento Module Creater 的方式是运行如下命令:
      $ kurento-module-creator -c <CODEGEN_DIR> -r <ROM_FILE> -r <TEMPLATES_DIR>


    在这里:
     . CODEGEN_DIR: 
       生成文件的目的路径
     . ROM_FILE:
       A space separated list of Kurento Media Element Description (kmd) files or folders containing this files. 
       As an example, you can take a look to the kmd files within the Kurento Media Server source code.
       包含这个文件的 Kurento Media Element Description (kmd)文件列表或文件夹的空间划分。
     . TEMPLATES_DIR: 
       Directory that contains template files. 
       As an example, you can take a look to the internal Java and JavaScript templates.

     

    专注webrtc、kurento音视频开发

    qq:911921258

    展开全文
  • EGURU KURENTO屏幕捕获 演示惊吓 支持语言:English (United States)
  • Kurento架构

    2020-03-12 10:28:13
    参考 kurento architecture 架构 信令部分 和 媒体部分 Kurento架构,信令和媒体层 信令层: 提供媒体协商能力、QoS参数化、呼叫建立、用户注册、用户显现等的一些模块组成了信令层。(The parts of the system...

     

    https://www.jianshu.com/p/8c31479e6083

    参考 kurento architecture

    架构

    信令部分 和 媒体部分

    Kurento架构,信令和媒体层

    • 信令层: 提供媒体协商能力、QoS参数化、呼叫建立、用户注册、用户显现等的一些模块组成了信令层。(The parts of the system in charge of the management of communications, that is, the modules that provides functions for media negotiation, QoS parametrization, call establishment, user registration, user presence, etc. are conceived as forming part of the Signaling Plane.)
    • 媒体层: 媒体支持、编解码和媒体处理等组成了此层...(Functionalities such as media transport, media encoding/decoding and media processing make the Media Plane, which takes care of the handling of media. The distinction comes from the telephony differentiation between the handling of voice and the handling of meta-information such as tone, billing, etc.)

    Kurento接口

    • Kurento协议:websocket
    • Kurento API:是从面向对象的角度使用kurento协议.
    • Java 和 JS 客户端: 简化API使用, 分别可以在Java服务端、 NodeJS、浏览器里实现和KMS的交互

    Kurento模块

    插件式的模块, KMS默认使用模块:kms-core, kms-elements, kms-filters。其他增强型的模块如:kms-crowddetector, kms-pointerdetector, kms-chroma, 和 kms-platedetector。
    用户可通过自定义模块扩展其功能。

    模块构架,可使用内置模块扩展功能,也可开发自定义模块

    使用Kurento创建应用

    • 展现层(客户端):负责媒体的展现和抓取
    • 应用逻辑层:负责媒体业务逻辑。具体说, 这一层要通过控制KMS连接媒体组件Media Elements 创建恰当的媒体管道pipeline, 让相关的媒体流从中通过
    • 服务层:为了支持业务层, 负责媒体的处理,如媒体录制、加密等,具体说就是KMS

    可将展现层放在客户端, 服务层放在服务端, 业务逻辑层放二者之一即可:

    核心的两部分交互:媒体协商和媒体交换

    一般为了简化客户端,业务逻辑层放在服务端。当然也可以使用如 Kurento JavaScript Client将业务层放在客户端。

    客户端、服务端及Kurento的交互

    web和多媒体层架构

    1. 媒体协商阶段(信令)

    如上图所示,在第一阶段,客户端向应用服务请求某种媒体能力,此过程可使用任何协议(http, websocket, SIP等)。

    当应用服务接到请求,可以执行其业务逻辑,可包括AAA:认证(Authentication)、授权(Authorization)和计费(Accounting), CDR阶段和web服务调用等

    之后,应用服务端根据开发自定义的指令决定如何通过媒体组件连接来创建一个pipeline,一旦KMS创建成功pipeline,应用服务将成功消息发送给客户端,告知怎样以及去哪(How and Where)获取媒体服务。

    字啊以上的过程中都没有媒体数据(media data)真正交换, 所有的交互都是在协商媒体交换的问题:什么、何时、何地、怎样(whats hosts wheres and whens)。所以称为协商阶段, 显然此阶段之保护指定协议。

    2. 媒体流交换阶段

    媒体协商过后, 真正专注于媒体数据的交换。客户端使用在协商阶段获取的信息,向KMS获取媒体数据。

    使用Kurento做实时WebRTC应用

    Kurento允许浏览器建通过WebRTC建立实时媒体会话。另外,可使用KMS作为不同客户端间交互的媒体代理。所以KMS可以扮演会议桥接(conference bridge (Multi-Conference Unit, MCU))、端到端通信系统(machine-to-machine)、视频呼叫录制系统等( video call recording system)。

    如下图,客户端通过SDP暴露自己的媒体嗯嗯管理,因此,应用服务能够实例化恰当的WebRTC端点(endpoint),请求KMS,KMS基于自身的和客户端的媒体能力生成相应的SDP回应, 客户端获取到回应后开始媒体数据交换。总结为下图:

    在WebRTC会话中的主要交互

    应用开发者可在媒体协商阶段根据需要创建pipeline,如:创建一个WebRTC应用录制客户端音视频,并且在识别到人脸时给戴上一个帽子:

    pipeline示例

    Kurento设计原则:

    • 媒体和信令分离
    • 媒体和应用服务可分布式水平扩展
    • 适合于云 PaaS
    • 媒体管道 Piplines
    • 对应用开发友好:屏蔽了KMS的复杂性,可用任何平台和语言
    • End-to-End的交流能力:开发者不用处理媒体编解码、传输和渲染等复制事宜
    • 可全权处理的媒体流:不止普通软件(如Skype)人与人交流,可实现人与机器、机器与机器之间的交流。
    • 过程可监控:可为QoS监控、账单、审计等生成丰富详细的信息
    • 无缝的IMS(IP Multimedia Subsystem)集成
    • 透明的媒体适应层:使得不同设备(屏幕尺寸、耗电能力、传输速率等)的会聚成为可能



    作者:happeace
    链接:https://www.jianshu.com/p/8c31479e6083
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • Copyright © 2014 ...Code for other Kurento projects can be found in the GitHub Kurento group. News and Website Information about Kurento can be found on our website. Follow us on Twitter @kurentoms.
  • Kurento通过编排一套广泛的技术来工作,这些技术必须协同工作,一些技术可以通过修改几个配置文件来启用。 • /etc/kurento/kurento.conf.json:这是主配置文件,提供有关Kurento Media Server本身行为的设置 • /...

    Kurento通过编排一套广泛的技术来工作,这些技术必须协同工作,一些技术可以通过修改几个配置文件来启用。

    • /etc/kurento/kurento.conf.json:这是主配置文件,提供有关Kurento Media Server本身行为的设置

    • /etc/kurento/modules/kurento/MediaElement.conf.ini:所有媒体元素通用参数。

    • /etc/kurento/modules/kurento/SdpEndpoint.conf.ini: SdpEndpoint * s的音频/视频参数(即* WebRtcEndpoint和RtpEndpoint)。

    • /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini: WebRtcEndpoint的特定参数

    • /etc/kurento/modules/kurento/HttpEndpoint.conf.ini: HttpEndpoint的特定参数

    • /etc/default/kurento-media-server:这个文件是系统服务加载的初始化文件,定义一些环境变量,对诸如调试日志记录或崩溃时生成的核心转储文件之类的功能有影响,

    8.1媒体服务

    文件:/etc/kurento/kurento.conf.json.

    [TODO]说明参数

    8.2媒体元素

    文件:/etc/kurento/modules/kurento/MediaElement.conf.ini

    [TODO]说明参数

    8.3 SdpEndpoint

    文件:/etc/kurento/modules/kurento/SdpEndpoint.conf.ini

    [TODO]说明参数

    8.4WebRtcEndpoint

    文件:/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini

    [TODO]说明参数

    8.5HttpEndpoint

    文件:/etc/kurento/modules/kurento/HttpEndpoint.conf.ini

    [TODO]说明参数

    8.6调试日志

    文件: /etc/default/kurento-media-server.

    8.7服务初始化

    软件包kms提供了一个与Ubuntu初始化系统集成的服务文件,该服务文件从/ etc / default / kurento-media-server加载其用户配置,用户可以根据需要配置多个功能

    展开全文
  • kurento安装文档.docx

    2020-05-08 17:23:35
    该资源为 webRtc的开源产品 kurento 安装流程,以及kurento客户端demode 搭建和配置步骤
  • 开发人员指南 ...如果您希望编写使用Kurento的应用程序,那么您应该阅读Writing Kurento应用程序。 目录 开发人员指南 介绍 代码库 开发101 Libraries Debian软件包 Build Tools Build from source...
  • kurento服务器搭建

    千次阅读 2019-11-05 15:21:08
    Kurento media server服务搭建一、下载ubuntu18.04服务器1、安装gunpg2、确定ubuntu版本3、设置变量4、添加key5、设置kurento.list6、安装kurento media server7、启动/停止/状态/重启二、kurento tutorial java服务...
  •  《 Kurento-6.7.1 媒体服务器搭建详细教程 》 关于 Kurento 媒体服务器 ...Kurento 媒体服务器所有的媒体处理模块都是插件式的,即 Kurento 的所有的功能模块都是可以被激活和关闭插件式模...
  • kurento 是一个WebRtc 流媒体服务服务器,Kurento媒体服务器提供即时可用的组通信,混合,转码,录制和播放。另外,它还提供一些高级的媒体处理模块,包括有计算机视觉,虚拟现实,透镜等 功能 kurento-room 是kurento ...
  • Kurento服务端搭建、Ubunto安装,网络配置,网络经常断开处理。
  • 关于Kurento 和 WebRTC-Kurento学习(一)

    千次阅读 2020-02-01 15:43:57
    关于Kurento 和 WebRTC 关于Kurento 和 WebRTC Kurento是一个WebRTC媒体服务器和一组客户端API,简化了针对web和智能手机平台的高级视频应用程序的开发。它的特点包括通信组、转码、录音、混音、广播和视听流的...
  • Kurento 安装指南-Kurento学习(三)

    千次阅读 2020-02-01 15:12:43
    Kurento媒体服务器(KMS)可以多种方式安装 在Amazon Web Services(AWS)云服务中使用EC2实例。对于那些不想为正确配置服务器和所有软件包而烦恼的用户,建议使用AWS,因为提供的安装程序会自动完成所有这一切。 ...
  • Kurento API 参考

    2020-03-12 09:54:13
    v6.13.0 参考... Kurento API Table of Contents Kurento API Media Elements and Media Pipelines Endpoints Filters Hubs Kurento Medi...
  • Kurento Video Record

    2021-01-12 03:13:53
    <div><p>Hello. I am making a video call with '...<p>https://doc-kurento.readthedocs.io/en/6.9.0/tutorials/js/tutorial-recorder.html</p><p>该提问来源于开源项目:feross/simple-peer</p></div>
  • kurento 日志配置

    2020-03-19 15:37:34
    kurento 日志配置 网上找了半天也找不到相关文章,最后在代码中找到默认配置(kurento-media-server.default) 并写明文档地址https://doc-kurento.readthedocs.io/en/latest/features/logging.html ############ ...
  • 14.1 Kurento协议 Kurento媒体服务器可以被两种外部Kurento客户端控制,如Java或JavaScript。 这些客户端使用Kuernto协议来和KMS通信。 Kurento协议是基于WebSocket协议,并使用了JSON-RPC V2.0 消息来提交请求和...
  • kurento-java.rar

    2020-03-18 17:20:33
    官方代码kurento-java中的kurento repository启动后,不能上传、下载。官方代码没有完善。 代码中有说明 // gridFS = new GridFS(mongoTemplate.getDb()); // TODO: refactor GridFS API to SpringBoot 2 修改后...
  • 编写Kurento模块 --OpenCV 模块 --GStreamer模块 --两种模块 --例子 [待办事项审查] 你可以扩展KMS开发你自己的模块,Kurento模块有两种风格: 基于openCV的模块:这种类型的模块是推荐的,如果你想要...
  • 第一章:关于kurento与webrtc Kurento是一个Webrtc媒体服务,通过客户端API为网页和手机平台更轻松的开发高级的视频程序,Kurento包括组通信、转码、录制、混淆、广播和路由音视频流。 通过Kurento以下特性可以更...
  • 基于Kurento搭建WebRTC服务器 实现 WebRTC 的几个想法 其他资料: kurento和打洞的服务器的安装及部署 安装KMS (Kurento Media Server) 推荐使用Docker安装,如果没有安装Docker,这里有个安装教程:Centos...
  • 可以按照网络的架构原理使用Kurento,即创建一个基于kurento的多媒体应用,与使用任何流行的Web开发框架创建Web应用程序类似的体验。 在最高抽象级别上,Web应用程序的体系结构由三个不同的层组成: 表示层...
  • 13.1 Kurento API 参考 Kurento媒体服务器提供了一套API给高级语言使用,以用于应用程序开发人员来控制它。 这些API可以被用于Java或Javascript开发的Kurento 客户端。 如果你更喜欢其它开发语言,你可以使用基于...
  • 在满足以下要求的机器上,可以将Kurento Room应用程序安装为系统服务(例如kurento-room-demo)。本节介绍如何部署(安装,配置和执行)Room Demo应用程序。 我们还提供了一种方法来运行演示,而不诉诸于系统级安装。** ...
  • Kurento服务器安装

    千次阅读 2017-10-12 16:27:43
    Kurento服务器安装

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 853
精华内容 341
热门标签
关键字:

kurento