Android 如何将RTMP流式传输到Azure媒体服务?

Android 如何将RTMP流式传输到Azure媒体服务?,android,azure,ffmpeg,rtmp,azure-media-services,Android,Azure,Ffmpeg,Rtmp,Azure Media Services,我正在尝试将我的相机流式传输到Azure Media Services LiveEvent。我正在使用Media Services的REST-API获取摄取URL,但是文档中没有提到如何从Android手机上传输RTMP 到目前为止,我已经尝试了一些Git上可用的Android RTMP发布库,但它们中的每一个都无法建立连接。到目前为止我尝试过的库列表: (打开连接时NDK内部出现故障) (期望从摄取URL接收标头时失败) 还有其他几个都表现出上述两种行为中的一种 我还尝试过使用ffmpeg

我正在尝试将我的相机流式传输到Azure Media Services LiveEvent。我正在使用Media Services的REST-API获取摄取URL,但是文档中没有提到如何从Android手机上传输RTMP

到目前为止,我已经尝试了一些Git上可用的Android RTMP发布库,但它们中的每一个都无法建立连接。到目前为止我尝试过的库列表:

  • (打开连接时NDK内部出现故障)
  • (期望从摄取URL接收标头时失败)
  • 还有其他几个都表现出上述两种行为中的一种
我还尝试过使用ffmpeg从mp4视频文件中进行流式传输,其灵感来源于:

ffmpeg-re-i video.mp4-vcodec libx264-profile:v main-preset:v medium-r 30-g 60-keyint_min 60-sc_threshold 0-b:v 2500k-maxrate 2500k-bufsize 2500k-filter:v scale=“trunc(oha/2)2:720”-sws_标志lanczos+精确的rnd-acodec aac-b:a 96k-ar 48000-ac 2-f flv rtmp://
但我得到了:

rtmp://<AZURE_INGEST_URL>: I/O error
rtmp://:I/O错误
我错过什么了吗

正如许多Azure用户所建议的那样,在没有中间层的情况下,流式传输到摄取URL是可能的吗


编辑:我已经使用两个RTMP库成功地流式传输到YouTube直播,因此我现在非常确定问题不在于RTMP流媒体库,而在于Azure直播流媒体的工作方式。我肯定错过了一个步骤。

您可能只是忘记在摄取URL路径后添加唯一的流键

请看OBS教程

摄取RTMP终结点应以/live/{GUID}结尾

在此之后,添加另一个/和唯一的流名称,以/live/{GUID}/{uniquename}结束

rtmp://accountname-uswe.channel.media.azure.net:1935/live/8b53cc4e68c04e00a4855ffc3e678a62/someuniqueStreamID


然后尝试连接。客户经常感到困惑,认为路径中的GUID是流键-它不是流键。

您可能只是忘记在摄取URL路径之后添加唯一的流键

请看OBS教程

摄取RTMP终结点应以/live/{GUID}结尾

在此之后,添加另一个/和唯一的流名称,以/live/{GUID}/{uniquename}结束

rtmp://accountname-uswe.channel.media.azure.net:1935/live/8b53cc4e68c04e00a4855ffc3e678a62/someuniqueStreamID


然后尝试连接。客户经常感到困惑,认为路径中的GUID是流密钥-它不是流密钥。

@JasonPan是的,这就是我的摄取URL的样子(我只是出于安全目的删除了它)。但问题是为什么摄取URL不接受我的流。@JasonPan是的,这就是我的摄取URL的样子(我只是出于安全目的才删除的)。但问题是,为什么摄取URL不接受我的流。感谢您的响应,我已尝试添加一个唯一的流id,但仍然没有预览,库一直在断开连接以查找不存在的头。有几个问题-您是否同时发送H264和AAC编解码器?您是否坚持1080p 30fps或更低?流设置有什么独特之处吗?我们拒绝直播转码频道上每秒60帧的内容?在测试库之前,您是否同时使用FFMPEG和OBS进行了测试?你试过其他图书馆吗?嗨,约翰,谢谢你的回答。我已经发现了问题所在。我使用文档中提供的示例请求,使用restapi创建
LiveEvent
。在示例请求中,摄取URL没有定义的
accessControl
策略,默认设置似乎不允许每个IP。有一次,我在创建
LiveEvent
时为摄取url提供了一个
accessControl
。我能够使用流式传输到摄取URL,并创建资产、LiveOutput、流式传输端点等。这可能有点超出了这个问题的范围。但是我刚刚发现Azure最多支持5个同时的
LiveEvent
,因为我在创建第五个LiveEvent时出错。没有办法提高这个限额吗?因为我想到的用例有点像Twitter的潜望镜。我的应用程序是一个社交平台,在这里(希望如此),可以有数千名用户同时向许多其他人发送流媒体。哪个示例导致您无法访问控制?我得把它修好!感谢您的回复,我尝试添加了一个唯一的流id,但仍然没有预览,库一直在断开连接以查找不存在的头。有几个问题-您是否同时发送H264和AAC编解码器?您是否坚持1080p 30fps或更低?流设置有什么独特之处吗?我们拒绝直播转码频道上每秒60帧的内容?在测试库之前,您是否同时使用FFMPEG和OBS进行了测试?你试过其他图书馆吗?嗨,约翰,谢谢你的回答。我已经发现了问题所在。我使用文档中提供的示例请求,使用restapi创建
LiveEvent
。在示例请求中,摄取URL没有定义的
accessControl
策略,默认设置似乎不允许每个IP。有一次,我在创建
LiveEvent
时为摄取url提供了一个
accessControl
。我能够使用流式传输到摄取URL,并创建资产、LiveOutput、流式传输端点等。这可能有点超出了这个问题的范围。但是我刚刚发现Azure最多支持5个同时的
LiveEvent
,因为我在创建第五个LiveEvent时出错。没有办法提高这个限额吗?因为我想到的用例有点像Twitter的潜望镜。我的应用程序是一个社交平台,在这里(希望如此),可以有数千名用户同时向许多其他人发送流媒体。哪个示例导致您无法访问控制?我得把它修好!
rtmp://<AZURE_INGEST_URL>: I/O error