我正在开发一个业余爱好项目,其目标是开发一个Android应用程序,该应用程序能够使用FFMpeg作为底层引擎,在LAN设置中通过网络摄像头传输实时源。到目前为止,我做了以下 -
A.为以下版本编译和生成FFMpeg相关库 -
FFMpeg版本:2.0 NDK版本:r8e&r9 Android平台版:android-16&android-18thisthisthisthis 工具链版本:4.6和4.8 平台构建于:Fedora 18(x86_64)
B.在适当的路径中创建文件Android.mk和Application.mk。
但是,当使用Java从应用程序层编写用于访问FFMpeg的适当功能的本机代码时,我坚持以下问题 -
a)我需要提供从本机到应用层的所有FFMpeg功能,以实现流式实时馈送? b)为了编译Android的FFMpeg,我遵循了this链接。编译选项是否足以处理* .sdp流或我是否需要修改它? c)我是否需要使用live555?
我是FFMpeg和Android应用程序开发的新手,这将是我第一个针对Android平台的认真项目。我一直在寻找使用FFMpeg处理RTSP流的相关教程一段时间,但没有取得多大成功。此外,我尝试了VLC播放器的最新开发版本,发现它非常适合流式传输实时源。然而,这是一个复杂的野兽,我的项目的目标是非常有限的,主要是学习 - 在短时间内。
您能否就如何编写本地代码以利用FFMpeg库以及随后使用应用层中的这些功能来实时流式传输提供一些指示(例如链接,文档或示例代码)?此外,如果您能从功能的角度(在语言无关的意义上)让我知道该项目所需的背景知识,我们将非常感激。
我前段时间处于类似情况(我想从RTMP服务器流式传输一个mp3),这非常令人沮丧。但是,我设法凑合了一些实际上做了它应该做的事情的代码。一些指示:
openRTSPStream(String url)
这样的辅助函数,并将ffmpeg内容保存在C / C ++代码中。我之所以这么说,是因为ffmpeg大量使用指针和动态内存分配会让尝试从Java中使用它变得很麻烦。--disable-everything
,这也意味着它可能会禁用RTSP支持。我建议您删除该标志或使用configure
,--list-protocol
,--list-demuxer
,--list-muxer
和--list-encoder
(或类似的东西)运行--list-decoder
脚本,以了解您需要启用的内容。您需要记住视频和音频的格式和编码以及要将其解码的内容。这是你可能感兴趣的另一篇SO帖子:Record RTSP stream with FFmpeg libavformat
如果您需要一些示例代码或进一步说明,请与我们联系。