RTMP视频通话流


如今,流媒体平台正处于普及高峰,因为数百万的人才会定期分享他们的知识-阅读,他们会充分利用流媒体。 随着这个市场的增长,有许多应用程序可以使用智能手机或便携式相机流式传输实时视频。 也许您还想在应用程序中引入此类功能; 如果是这样,那么我们赶快去拜访-现在Voximplant允许您通过RTMP将视频呼叫转发到支持此协议的任何CDN。

新的Voxengine模块-StreamingAgent使此功能成为可能。 根据削减,您正在等待配置此集成的5个步骤,欢迎您!

方案



来自移动/ Web应用程序或SIP的视频通话到达我们的云,然后将其定向到流CDN。 反过来,CDN会像往常一样将音频和视频流发送给最终用户。 请注意,RTMP仅支持H.264,因此在流式传输时显式指定此编解码器非常重要。

您将需要


  • 流服务上的帐户,例如TwitchYoutube
  • Voximplant帐户。 如果您没有,那么注册就住在这里
  • Voximplant应用程序以及脚本,规则和单个用户。 我们将在本教程中创建所有这些内容。
  • 用于捕获视频和音频的网络客户端-我们将使用演示视频聊天

1.流媒体设置


首先,您需要获取两个参数的值,这两个参数我们在云脚本中使用- 流名称/键服务器URL 。 下面显示了如何以Twitch和YouTube为例获取这些值。

抽搐


登录到您的帐户,单击右上角的个人资料图片,然后选择Video Producer。



在“设置”部分中,选择“频道”,然后单击页面顶部的“复制”以获取主流密钥。 请注意,该密钥仅在激活了双重身份验证后才可用。 将该值粘贴到您的文本编辑器中,或者仅打开此页面以稍后复制该值。

要查找服务器URL,请转到页面stream.twitch.tv/ingests ,选择推荐的服务器之一,然后复制它而不使用最后的斜杠,例如:rtmp://live-sfo.twitch.tv/app

YouTube的


登录到您的帐户,点击右上角的头像,然后选择YouTube Studio(测试版)。



如果您没有YouTube频道,则会出现一个有关创建频道的对话框。 单击创建频道,您将看到已创建频道的仪表板,并通知您在24小时内可以进行流式传输。



在YouTube Studio中,现在通过左侧菜单转到其他功能->实时流。 将打开一个新页面,其底部是编码器设置块。 在这里,您需要获取服务器URL和流名称/键值(或让页面保持打开状态)。



2. VOXIMPLANT设置


现在,您需要从Voximplant一侧进行设置。 首先登录到您的帐户: https : //manage.voximplant.com/auth 。 在左侧菜单中,单击“应用程序”,然后单击“新应用程序”,然后创建一个名为流的应用程序。 进入新的应用程序,切换到“脚本”选项卡,使用以下代码创建一个startStream脚本(不要忘记替换第8和9行中上一步的值):

require(Modules.StreamingAgent); VoxEngine.setVideoCodec("H264"); VoxEngine.addEventListener(AppEvents.CallAlerting, function (e) { const streaming = VoxImplant.createStreamingAgent({ protocol: "RTMP", url: "rtmp://live-sfo.twitch.tv/app", streamName: "live_********************", keyframeInterval: 4 }); e.call.sendMediaTo(streaming); streaming.addEventListener(StreamingAgentEvents.Connected, function (e) { Logger.write("LOG: StreamingAgentEvents.Connected: " + e.reason); }); streaming.addEventListener(StreamingAgentEvents.Disconnected, function (e) { Logger.write("LOG: StreamingAgentEvents.Disconnected: " + e.reason); }); streaming.addEventListener(StreamingAgentEvents.ConnectionFailed, function (e) { Logger.write("LOG: StreamingAgentEvents.ConnectionFailed: " + e.reason); }); streaming.addEventListener(StreamingAgentEvents.Error, function (e) { Logger.write("LOG: StreamingAgentEvents.Error: " + e.reason); }); streaming.addEventListener(StreamingAgentEvents.StreamStarted, function (e) { Logger.write("LOG: StreamingAgentEvents.StreamStarted: " + e.reason); }); streaming.addEventListener(StreamingAgentEvents.StreamError, function (e) { Logger.write("LOG: StreamingAgentEvents.StreamError: " + e.reason); }); streaming.addEventListener(StreamingAgentEvents.StreamStopped, function (e) { Logger.write("LOG: StreamingAgentEvents.StreamStopped: " + e.reason); }); e.call.answer(); e.call.addEventListener(CallEvents.Disconnected, function (e) { Logger.write("LOG: terminating in 6 secs"); setTimeout(VoxEngine.terminate, 6000); }); }); 

这是一个简单的脚本,可启动流并监视其所有可能的状态,例如:已连接,连接失败,StreamStarted等。 -脚本的详细信息将略低。 现在,您需要转到应用程序的“路由”选项卡,然后单击“新规则”。 将其命名为streamRule,指定startStream脚本并保留默认掩码(。*)。


在此阶段要做的最后一件事是创建一个用户。 转到“用户”选项卡,单击“创建用户”,指定名称(例如user1)和密码,然后单击“创建”。 我们将需要此用户名/密码对在Web客户端中进行身份验证。


Voximplant的配置已完成,但是在继续进行Web客户端之前,我建议了解StreamingAgent模块在我们的方案中如何工作。

3.场景


StreamingAgent模块允许开发人员将RTMP流启动到流行的刺激平台。 要使用模块的功能,我们必须在脚本的开始处将其连接:

 require(Modules.StreamingAgent); 

接下来,您必须明确指定在流式传输时将使用的编解码器。 由于许多平台(包括Twitch和YouTube)都使用RTMP,而后者又支持H.264,因此,我们将指出以下几点:

 VoxEngine.setVideoCodec("H264"); 

如果未指定编解码器,则可能引发StreamingAgentEvents.StreamError事件,其中包含错误文本:
 "Video codec mismatch. " + codecName + " granted, but should be H.264" 

然后,我们为CallAlerting事件添加一个处理程序,以处理来自Web客户端的视频通话(是的,我们会尽快处理)。 首先,我们将对createStreamingAgent方法的调用添加到处理程序 。 该方法具有以下参数,其中大多数是必需参数,可选参数分别标记:

  • 协议 -到目前为止仅支持RTMP;
  • url-服务器URL,请参阅步骤1;
  • streamName-流名称/键,请参见步骤1;
  • applicationName (可选)-streamName的一部分,例如live2。 如果所选平台需要,请使用此选项。
  • keyframeInterval (可选,秒)-流中生成关键帧的频率。 如果未指定,则默认值为2。

在上面的脚本清单中,对createStreamingAgent方法的调用如下所示:

 VoxEngine.addEventListener(AppEvents.CallAlerting, function (e) { const streaming = VoxImplant.createStreamingAgent({ protocol: "RTMP", url: "rtmp://live-sfo.twitch.tv/app", streamName: "live_********************", keyframeInterval: 4 }); 

但是我们可以省略keyframeInterval并使用applicationName,如下所示:

 VoxEngine.addEventListener(AppEvents.CallAlerting, function (e) { const streaming = VoxImplant.createStreamingAgent({ protocol: "RTMP", url: "rtmp://a.rtmp.youtube.com/", applicationName: "live2", streamName: "somename" }); 

创建流对象之后,脚本将继续处理处理程序中的调用。 下一步是将来自Web客户端的传入视频流定向到创建的流对象:

 e.call.sendMediaTo(streaming); 

然后,我们使用所有可能的流事件进行调试:处理程序除了将信息发送到Voximplant会话的日志外,什么也不做。 如果需要,您不能使用这段代码。

处理事件后,脚本将应答传入的呼叫:

 e.call.answer(); 

最后,当网络客户端停止发送视频时,我们必须正确处理流媒体的结尾。 正式地,我们也不能使用此处理程序,但是会话只会在视频停止发送60秒后结束。 这种期望没有意义,因此最好从Disconnected事件开始结束会话:

 e.call.addEventListener(CallEvents.Disconnected, function (e) { Logger.write("LOG: terminating in 6 secs"); setTimeout(VoxEngine.terminate, 6000); }); 

了解场景的逻辑后,我们准备开始配置的最后(但并非最不重要)部分。

4. Web客户端


克隆或下载我们的视频聊天演示。 然后转到存储库文件夹,并在文本编辑器/ IDE中打开WebApp / JS / app.js文件 。 在第5行更改应用程序的名称并保存文件:


实际上,仅此而已。

5.开始流式传输


您需要在本地或在Web服务器上运行WebApp文件夹。 要在本地运行,您可以使用实时服务器实用程序或Web Server for Chrome应用程序。 启动Web客户端时,必须为其指定Voximplant帐户的名称,例如:
  http://127.0.0.1:8080/index.html#accname=johngalt 


启动客户端后,输入步骤2中的登录密码对:


在@符号旁边输入任何字符集,然后按Call。 如果一切都正确完成,您的信息流将很快开始:)成功的信息流和为您带来富有成效的发展!

Source: https://habr.com/ru/post/zh-CN472402/


All Articles