如今,流媒体平台正处于普及高峰,因为数百万的人才会定期分享他们的知识-阅读,他们会充分利用流媒体。 随着这个市场的增长,有许多应用程序可以使用智能手机或便携式相机流式传输实时视频。 也许您还想在应用程序中引入此类功能; 如果是这样,那么我们赶快去拜访-现在Voximplant允许您通过RTMP将视频呼叫转发到支持此协议的任何CDN。
新的
Voxengine模块
-StreamingAgent使此功能成为可能。 根据削减,您正在等待配置此集成的5个步骤,欢迎您!
方案
来自移动/ Web应用程序或SIP的视频通话到达我们的云,然后将其定向到流CDN。 反过来,CDN会像往常一样将音频和视频流发送给最终用户。 请注意,RTMP仅支持H.264,因此在流式传输时显式指定此编解码器非常重要。
您将需要
- 流服务上的帐户,例如Twitch或Youtube ;
- 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。 如果一切都正确完成,您的信息流将很快开始:)成功的信息流和为您带来富有成效的发展!