java - 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 中的用户?
是否可以让应用程序中的用户能够创建凭据?
解决方案
我不是 Java 专家,但从我读到的有关 MediaRecorder 的内容来看,它无法在 RTMP 协议中流式传输输出。电话需要充当客户端,并将 RTMP 协议推送到 AMS 服务器端点。我相信 MediaRecorder api 仅从我在 API Docs 中看到的输出 mpeg 2 TS。
我见过将 MediaRecorder 的输出重新包装到 RTMP 流中的项目。以 https://github.com/octiplex/Android-RTMP-Muxer为例。没有得到我的认可。
对于您的其他问题。
- 永远不要在移动应用程序中包含您的 Azure 凭据!您需要使用中间层来为您的应用程序完成工作。这意味着您将构建一个 api 来与应用程序前端对话,并且该 api 将调用它需要的后端服务。在这种情况下,一个简单的 Azure Functions 应用程序就足够了,或者您可以在您喜欢的任何框架中构建和托管您的 api。AMS 的凭据将是一个 AAD 服务主体客户端 ID 和机密,需要在中间层进行保护以供您的 api 使用。然后,该 api 将返回诸如 RTMP 摄取 url 之类的信息。
- 当您在 AMS 的 v3 api 中创建实时事件时,您将返回一个包含“摄取 url”端点的对象。那有一个 RTMP://server dns name :1935 port 。这是您连接的网址。当然,请确保在连接之前先开始直播活动。
- 我建议您先使用 OBS studio 进行测试,直到您了解连接到 RTMP 服务器的流程。阅读我们文档中的OBS 工作室教程 阅读 该教程时,请考虑 OBS 工作室的行为就像您的 android 应用程序一样。
- 在您的 MediaRecorder 代码中,我看到您将音频设置为 AMR。您需要使用 AAC LC 音频格式。这是我们唯一支持提取的音频格式,也是 HLS 和 Dash 流媒体使用最广泛的格式。它将在交付给设备和浏览器时提供最大的兼容性。
推荐阅读
- c# - 在 ASP.NET CORE Web API 中获取客户端 IP 地址有问题吗?
- c# - REST 复杂资源访问
- java - 按顺序合并数组
- json - 使用修改后的请求正文发送错误的示例响应
- javascript - Sweetalert - 验证不起作用 + 表单未提交
- git - 从 Git 历史记录中删除文件夹内的文件
- github-pages - 将 GitHub Pages 域用于 Netlify 站点
- perl - 我在 Perl 中遇到了电子邮件程序的问题
- ejabberd - 使用 ejabberd 和 converse.js 在 MUC 中获取通知
- python - 如何在不同的间隔上绘制具有不同功能的曲面?