Android - 将摄像机流式传输为 RTMP 流

Android - Stream camera as RTMP stream

我想从 Android 设备捕获摄像头流并使用 RTMP 将其流式传输到服务器(服务器是 out 我的控制)。我还没有弄清楚如何从相机本身创建数据流,但这是以后要考虑的问题。

目前有两个问题:我希望支持 API 9+ 并且 Android 不支持 RTMP。

我环顾四周,发现这个 SO post Convert video Input Stream to RTMP and https://github.com/yixia/VitamioBundle. The former suggested a library 几乎没有文档。后者可能支持(?),但需要API14+。

是否有支持来自 Android 设备的 RTMP 流式传输的不错的示例或库?我还阅读了一些关于转换 RTSP 或 FFMPEG 的内容,如果这是一种可行的方法,那么我想它也足够了。

编辑 1:

我找到了 this library(它与上面提到的有很多相似之处)并尝试使用它。我将它导入 Android Studio 并编写了一些代码,但它似乎在内部崩溃并出现 java.lang.NoClassDefFoundError RTSP Codec Factory 错误。所以显然这在 Android.

上效果不佳

另外,我也遇到过好几次Adobe air。我不想在 Action Script 3 (AS3) 中编写代码,因为该库只是本机应用程序的(小)部分。如果 Adob​​e Air 有一个我不知道的库,那么如果可能的话,我很乐意集成它。

你应该看看spydroid;它完全符合您的要求。他们的网站可以在这里找到:https://code.google.com/p/spydroid-ipcamera/

它们提供了一个您可以使用的库,以及各种流式传输选项的解释和一些代码示例。可以在这里找到上述信息:https://github.com/fyhertz/libstreaming

如果您可以使用 ffmpeg 支持的协议从您的 android 设备发布(请参阅 the list of protocols supported),您可以使用以下命令将视频传输到您的服务器:

ffmpeg -re -i <input link> -vcodec h264 -ar 44100 -f flv "rtmp://<host>/<publication>"

accepted answer of the question you linked 有人建议使用 JavaCV。

它需要 API 8 或更高版本,并具有 FFmpegFrameRecorder class.

Link 到 github:

https://github.com/bytedeco/javacv

他们甚至有一个完整的捕获 flv 的示例(它相当大,所以我不会在这里粘贴它): https://github.com/bytedeco/javacv/blob/master/samples/RecordActivity.java

在您的情况下,您可能需要更换:

private String ffmpeg_link = "/mnt/sdcard/stream.flv";

private String ffmpeg_link = "rtmp://<server>:<port>/stream";