用于 rtsp 流媒体的 android MediaPlayer 替代品

标签 android ffmpeg android-mediaplayer android-videoview gstreamer

我需要在我的应用程序中使用多查看器,网格布局中的每个 View 都必须显示来自通过 rtsp 流式传输的摄像头的视频。

我尝试使用 Android VideoView 和 MediaPlayer,但结果并不令我满意,我在开始视频时有很多延迟,并且使用 Lg L9 手机存在兼容性问题(参见 my question here)

我搜索了很多 3rd party sdk,我找到了 Vitamio,但它不支持同一 Activity 中的多 View (有一个错误)。另一个商业 sdk 是 Nexstreaming 但不适用于 rtsp 协议(protocol)。 我没有发现别的。你认识其他人吗?

使用 NDK 可能是另一种方法,所以我看到了 Gstreamer ( tutorial ),但它似乎太复杂了。另一种方法可能是 FFMPEG,但我还没有找到明确的指南。

有什么帮助吗?

最佳答案

VideoView和MediaPlayer都是基于硬件解码器,具体针对不同的设备、厂商、平台。它们经过优化以提供最佳播放体验(例如 1080p),但当多个实例必须同时处于 Activity 状态时,它们会变得相当残废。我从未见过可以打开超过 4 个“OMX 句柄”的 Android 设备。但甚至不能保证两个会起作用。并且这些框架并不是为了在硬件资源耗尽时回退到软件解码器而构建的。

幸运的是,现代设备具有足够的通用计算能力,可以用解码后的视频流填充整个屏幕(例如,4 个 270p 流用于 960 x 540 显示器)。 Gstreamer 使用 ffmpeg 解码流,但这个库可能更适合您的目的,因为它包装了必要的功能,您可以忽略次要的实现细节。

我相信您会更好地使用 OpenGL 表示层,因为这样您就可以使用采用 YUV 4.2.0 平面图像(由解码器生成)并显示 RGB 的着色器将颜色转换卸载到 GPU 24 bpp 纹理。

关于用于 rtsp 流媒体的 android MediaPlayer 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21403495/

相关文章:

安卓方向改变

windows - DJI Windows 10 SDK FFMPEG 视频缓冲

java - 为什么我的第三首歌没有播放,我怎样才能让它播放?

java - 如何检查Android中是否存在资源

java - 带有固定选项卡的操作栏

java - 是否可以在 Android 中使用 phoneGap 在 sdcard 中加载/创建数据库?

ffmpeg rtsp 错误 : Nonmatching transport in server reply

c# - FFMPEG NReco.ConcatMedia 合并来自不同来源的文件

android - 完成音频后如何再次播放音频?

android - Android更新Visualizer Audio Session ID