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) 中编写代码,因为该库只是本机应用程序的(小)部分。如果 Adobe 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";
我想从 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) 中编写代码,因为该库只是本机应用程序的(小)部分。如果 Adobe 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";