我想从Android设备捕获相机流并将其流式传输到具有RTMP的服务器(服务器 out 我的控件)。我还没有想出如何从相机本身创建数据流,但这是为了以后的关注。
目前有两个问题:我希望支持API 9+,并且Android不支持RTMP。
我已经环顾四周,发现了这篇帖子Convert video Input Stream to RTMP和https://github.com/yixia/VitamioBundle。前者建议a library 几乎没有文档。后者可能支持它(?),但它需要API 14 +。
是否有适当的示例或库,支持来自Android设备的RTMP流?我还读过有关转换RTSP或FFMPEG的内容,如果这是一种可行的方式,那么我想它也足够了。
我发现this library(它与上面提到的很相似)并尝试使用。我在Android Studio中导入了它并编写了一些代码,但它似乎在内部崩溃,出现java.lang.NoClassDefFoundError RTSP Codec Factory
错误。显然,这在Android上运行得不是很好。
另外,我曾经多次遇到Adobe空气。我不想在Action Script 3(AS3)中编写代码,因为这个库只是本机应用程序的一个(小)部分。如果Adobe Air有一个我不知道的库,那么如果可能,我很乐意将它集成。
答案 0 :(得分:17)
在accepted answer of the question you linked有人建议使用JavaCV。
它需要API 8或更高版本,并具有 FFmpegFrameRecorder 类。
链接到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";
答案 1 :(得分:2)
你应该看看spydroid
;它完全符合您的要求。他们的网站可以在这里找到:https://code.google.com/p/spydroid-ipcamera/
它们提供了一个可以使用的库,以及各种流选项和一些代码示例的说明。所述信息可在此处找到:https://github.com/fyhertz/libstreaming
答案 2 :(得分:1)
如果您可以使用ffmpeg支持的协议从您的Android设备发布(请参阅the list of protocols supported),您可以使用以下命令将视频传输到您的服务器:
ffmpeg -re -i <input link> -vcodec h264 -ar 44100 -f flv "rtmp://<host>/<publication>"