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

问题描述 投票:5回答:1

我正在开发一个业余爱好项目,其目标是开发一个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库以及随后使用应用层中的这些功能来实时流式传输提供一些指示(例如链接,文档或示例代码)?此外,如果您能从功能的角度(在语言无关的意义上)让我知道该项目所需的背景知识,我们将非常感激。

android-ndk ffmpeg rtsp
1个回答
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

如果您需要一些示例代码或进一步说明,请与我们联系。

© www.soinside.com 2019 - 2024. All rights reserved.