使用FFMpeg在Android客户端上进行RTSP流式传输

时间:2013-08-05 21:49:34

标签: android-ndk ffmpeg rtsp

我正在开发一个爱好项目,其目标是开发一个Android应用程序,该应用程序能够使用FFMpeg作为底层引擎,在LAN设置中通过网络摄像头传输实时源。到目前为止,我做了以下 -

一个。为以下版本编译和生成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库编写本机代码并随后使用应用层中的这些功能来实时流式传输提供一些指示(例如链接,文档或示例代码)?此外,如果您能从功能的角度(在语言无关的意义上)让我知道该项目所需的背景知识,我们将非常感激。

1 个答案:

答案 0 :(得分:0)

前段时间我处于类似情况(我想从RTMP服务器流式传输一个mp3),这非常令人沮丧。但是,我设法凑合了一些实际上做了它应该做的事情的代码。一些指示:

  • 您不希望将ffmpeg的API公开给您的Java代码。相反,请考虑创建辅助函数,如openRTSPStream(String url),并将ffmpeg内容保存在C / C ++代码中。我这样说是因为ffmpeg使用指针和动态内存分配,这会让尝试从Java使用它变得很痛苦。

  • 用于编译库的脚本使用标志--disable-everything,这也意味着它可能会禁用RTSP支持。我建议您删除该标记或使用configure--list-protocol--list-demuxer--list-muxer--list-encoder运行--list-decoder脚本(或沿着这些方向的东西)来了解你需要启用什么。您需要记住视频和音频的格式和编码以及将要解码的内容。

  • 当您从流中读取数据包时,您的本机代码可以通过回调函数向您的Java代码发送缓冲区,该函数反过来将缓冲区显示为视频/音频。

以下是您可能感兴趣的另一篇SO帖子:Record RTSP stream with FFmpeg libavformat

如果您需要一些示例代码或进一步说明,请告诉我。