java - Azure媒体服务直播如何从Android应用程序实现流

标签 java android azure live-streaming azure-media-services

我正在尝试在 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 媒体服务集成的方法,以将实时流媒体广播到云,并在向其他应用程序的推送通知中传递流的链接
我暴露了this 。 android gradle 文件中的依赖项无效。我们需要如何处理它? 还需要用RTMP吗?或者因为文件内容直接保存在 azure 存储中的 Assets 文件中,所以它正在执行这项工作?
我对定位器创建端点的了解有多少。
我可以在应用程序中获取此端点 url 来发送它还是它仅存在于 azure 门户中?
广播公司是否需要成为 AAD 的用户?
是否可以为应用中的用户提供创建凭据的能力?

最佳答案

我不是 Java 专家,但根据我所读到的有关 MediaRecorder 的内容,它不具备以 RTMP 协议(protocol)流式传输输出的能力。电话需要充当客户端并将 RTMP 协议(protocol)推送到 AMS 服务器端点。我相信 MediaRecorder api 仅输出我在 API 文档中看到的 mpeg 2 TS。

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

对于您的其他问题。

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

关于java - Azure媒体服务直播如何从Android应用程序实现流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63068551/

相关文章:

java - 在spring和eclipse中演示微服务不起作用

java - 如何将源代码导入到eclipse中

java - java中的KeyPressed事件

android - 使用国际化在 Xamarin.Android 上使用 MvvmCross 框架设置标题栏值

azure - 如何将 secret 变量从一个阶段传递到另一个Azure DevOps管道?

java - 在OpenGL中绘制两个相交的三角形

android - 重新加载时刷新 fragment

android - 无法实例化类型 View.OnClickListener Java 错误

azure - 有没有办法在 Azure DevOps Pipelines YAML 中参数化/动态设置变量组名称?

azure - 是否可以在 Azure DevOps 中显示 ARM 部署的进度?