首页 > 解决方案 > Azure 媒体服务直播如何实现来自 android 应用的流

问题描述

我正在尝试在 java 中查找有关实时流媒体的任何代码示例。
我想通过 azure 媒体服务在 android 应用程序中实现它。 
目前我有 MediaRecorder 实例,其配置如下:

    mMediaRecorder = new MediaRecorder();
        mMediaRecorder.setCamera(mServiceCamera);
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

        public String filePath = Environment.getExternalStorageDirectory().getPath() + "/video.mp4";

        mMediaRecorder.setOutputFile(filePath);

我在我的应用程序中搜索了与 azure 媒体服务集成的方法,以将直播流式传输到云,并将流的链接传递到推送通知中的其他应用程序中
,我公开了这个。android gradle 文件中的依赖项无效。我们需要如何处理它?还需要用RTMP吗?还是因为文件内容直接保存在天蓝色存储中的资产文件中,所以它正在完成这项工作?
我对定位器创建端点了解多少。
我可以在应用程序中获取此端点 url 以进行发送还是仅存在于 azure 门户中? 
广播公司是否需要成为 AAD 中的用户? 
是否可以让应用程序中的用户能够创建凭据?

标签: javaandroidazurelive-streamingazure-media-services

解决方案


我不是 Java 专家,但从我读到的有关 MediaRecorder 的内容来看,它无法在 RTMP 协议中流式传输输出。电话需要充当客户端,并将 RTMP 协议推送到 AMS 服务器端点。我相信 MediaRecorder api 仅从我在 API Docs 中看到的输出 mpeg 2 TS。

我见过将 MediaRecorder 的输出重新包装到 RTMP 流中的项目。以 https://github.com/octiplex/Android-RTMP-Muxer为例。没有得到我的认可。

对于您的其他问题。

  1. 永远不要在移动应用程序中包含您的 Azure 凭据!您需要使用中间层来为您的应用程序完成工作。这意味着您将构建一个 api 来与应用程序前端对话,并且该 api 将调用它需要的后端服务。在这种情况下,一个简单的 Azure Functions 应用程序就足够了,或者您可以在您喜欢的任何框架中构建和托管您的 api。AMS 的凭据将是一个 AAD 服务主体客户端 ID 和机密,需要在中间层进行保护以供您的 api 使用。然后,该 api 将返回诸如 RTMP 摄取 url 之类的信息。
  2. 当您在 AMS 的 v3 api 中创建实时事件时,您将返回一个包含“摄取 url”端点的对象。那有一个 RTMP://server dns name :1935 port 。这是您连接的网址。当然,请确保在连接之前先开始直播活动。
  3. 我建议您先使用 OBS studio 进行测试,直到您了解连接到 RTMP 服务器的流程。阅读我们文档中的OBS 工作室教程 阅读 该教程时,请考虑 OBS 工作室的行为就像您的 android 应用程序一样。
  4. 在您的 MediaRecorder 代码中,我看到您将音频设置为 AMR。您需要使用 AAC LC 音频格式。这是我们唯一支持提取的音频格式,也是 HLS 和 Dash 流媒体使用最广泛的格式。它将在交付给设备和浏览器时提供最大的兼容性。

推荐阅读