kev*_*kev 7 android ffmpeg android-ndk
我需要从一个Android摄像头/文件流到一个远程ffserver,它将播放我的视频.我可以通过发出如下命令在ubuntu的桌面上执行此操作:
ffmpeg -f video4linux2 -s 640x480 -r 25 -i /dev/video0 http://192.168.0.20:8090/cam1.ffm
Run Code Online (Sandbox Code Playgroud)
或流式传输这样的文件:
ffmpeg -i /home/kev/share/movie.mp4 http://192.168.0.20:8090/cam1.ffm
Run Code Online (Sandbox Code Playgroud)
所以基本上我希望能够从android做到以上.经过几次搜索,这是我到目前为止所做的 - 我遇到了这个链接http://bambuser.com/opensource,我从中下载了ffmpeg源并构建了它.构建输出了几件东西:1.共享库[libavcodec,libavcore,libavdevice,libavfilter,libavformat,libavutil,libswscale] 2.可执行文件[ffmpeg,ffprobe]
不知道如何使用这些资源插入我的功能这是我到目前为止所尝试的:1.使用System.loadLibrary()将libs加载到我的Activity中然后将ffmpeg可执行文件复制到assets文件夹,在运行时我将其复制到my应用程序的"文件"目录然后我使用Runtime.getRuntime().exec()设置可执行文件的权限.然后最后一步是在java中使用以下语句执行它:
Runtime.getRuntime().exec("ffmpeg -i file:///android_asset/movie.mp4http://<server>:8090/cam1.ffm");
Run Code Online (Sandbox Code Playgroud)
2.复制ffmpeg.c,共享库和构建到我的jni文件夹生成的"include"文件夹,并添加了一个包装ffmpeg.c中main()函数的jni函数.通过这种方法,我发现自己必须从ffmpeg源复制几个头文件才能使ndk-build成功,我非常怀疑这是否可行.
以上两种方法对我有用,我不知道我哪里出错了,所以任何有关如何做一个简单的ffmpeg流式传输的帮助就像来自android的mp4文件一样,将受到高度赞赏.
我使用apporach 2让它工作,这就是我所做的。1. 将 ffmpeg.c、“include”文件夹和共享库复制到我项目的 jni 文件夹中。
参考这篇博文http://demo860.blogspot.com/2010/07/android-ffmpeg-dynamic-module-jni.html修改了ffmpeg.c
使用 ndk 构建时出现了几个错误,所以我只是添加了缺少的依赖项,直到最终构建成功。
起初,应用程序会启动,然后立即退出,这是由于我忘记执行以下几件事,因此请确保您已完成以下操作,以节省自己的时间和脱发: - 在清单上设置互联网权限(如果媒体)文件位于 SD 卡中,设置写入外部存储权限并确保 SD 卡已安装) - 确保远程 ffserver 正在运行并正确配置。您可以通过从桌面流式传输来确认 - 确保您传递了正确的参数
现在我可以从 SD 卡中的 mp4 文件流式传输到远程 ffserver,尚未尝试从设备摄像头流式传输。