我想将视频录制从我的 android 手机流式传输到网络媒体服务器。
第一个问题是,在将MediaRecorder
输出设置为套接字时,流缺少一些mdat
大小的标头。这可以通过在本地预处理该流并将丢失的数据添加到流中以生成有效的输出流来解决。
问题是如何从那里着手。
如何将该流输出为 RTMP 流?
首先,让我们解开你的问题。如您所料,Android 目前不支持RTMP 。您可以使用一些侧库来添加支持,但这些可能不是完整的实现,或者具有其他不良副作用和错误,导致它们无法满足您的需求。
在这种情况下,常见的替代方法是使用RTSP。它提供了一种具有自己的 RFC的可比较的会话格式,并且它与 RTP 结合时的数据包结构与您所需的协议非常相似(没有一些细节)。您可以在此处执行必要的修复以将 RTP/RTSP 转换为 RTMP,但如前所述,此类工作目前超出了您的应用程序的开发范围。
因此,假设您想使用 RTMP(使该线程无效)并且上面链接的库不能满足您的需求。
例如,您可以按照本教程使用 Livu、Wowza 和 Adobe Flash Player 进行录制和播放,并与Livu 开发人员讨论他们的客户端许可问题。或者,您可以使用此客户端库及其完整的Android 记录器示例来构建您的客户端。
总结一下:
祝你的申请好运。我承认我对所有这些库的理解不够全面,但在撰写本文时,这些似乎是该领域的标准解决方案。
根据OP,走RTMP库集:
简而言之:需要做更多的工作。其他答案以及对这些示例的改进是这里需要的。
如果您在 Android 设备上使用网络浏览器,则可以使用 WebRTC 进行视频捕获和服务器端录制,即使用Web Call Server 4
因此完整路径将是:
Android Chrome [WebRTC] > WCS4 > 录制
所以这里不需要 RTMP 协议。
如果您使用的是独立的 RTMP 应用程序,则可以使用任何 RTMP 服务器进行视频录制。据我所知,Wowza 支持 H.264+Speex 录制。