用 Java 实现 RTSP 媒体服务器

Posted

技术标签:

【中文标题】用 Java 实现 RTSP 媒体服务器【英文标题】:Implementing RTSP media server in Java 【发布时间】:2011-07-21 07:43:07 【问题描述】:

我正在尝试在 java 中实现一个简单的 RTSP 服务器,它将使用 android 手机作为接收客户端。我已经在互联网上搜寻答案并多次返回该站点。通过这一点,我发现 JMF 在服务器端本身并不支持 RTSP,并且必须使用 Netty、Xuggler、Mina 等 NIO 框架扩展 java。我唯一的问题是在搜索这些站点的文档后,我有没有找到任何关于如何实现 RTSP 的基本示例。

我的问题是:有没有人遇到过这个问题并解决了它,如果有的话,请给我一些有用的源代码或文档。牢记这一点,已经查看了该站点上的每个相关主题,并跟进了大多数链接,但无济于事。我对 java 并不陌生,我了解所有流式协议,但我对 java 中的流式实现并不陌生。

谢谢

【问题讨论】:

我不明白这个问题。你不知道如何实现RTSP? RTSP 与 HTTP 相同。它是基于文本的,有文本请求和文本响应。您应该实现与任何其他服务器相同的服务器(多线程)。在这里:ietf.org/rfc/rfc2326.txt 你可以找到所有你需要的东西(所有请求,所有响应),在这里tools.ietf.org/html/rfc4566 你可以看到如何建立 SDP 消息......但我看不出有什么问题?你可以说得更详细点吗?你想直播什么? 您好,欢迎您回复。我想以 android OS 允许的设置格式流式传输视频和音频。我已经阅读了 RTSP 的 RFC 并了解该协议的工作原理。当我摆弄 Java Media Frame 时,我发现有一些设置类可以控制 RTP 和 RTCP 会话,但对于 RTSP 却没有。我也知道 RTSP 可以与各种其他协议(例如 HTTP)一起使用,但我特别在 UDP 上寻找 RTP,因为我相信它最适合流式传输。我真的只是想知道一种使用 java 成功地向 RTSP 客户端提供视频和音频的方法。 那么为什么在java中?为什么不使用 Darwin 流媒体服务器? 你知道VLC媒体播放器可以作为RTSP、UDP、HTTP、MMS等各种流协议的流媒体服务器吗?一些 Java 项目已经在 J​​ava 中应用了 VLC 引擎(VLC 媒体播放器使用的 libVLC 库和插件),例如 VLCJ。 【参考方案1】:

很难回答你的问题......我只会给你一些基本的建议: - 用一点 POC 开始你的工作,以获得对 Java 网络编程的信心 - 阅读 Java World 中可用的几个 TCP/IP 开源服务器实现的一些源代码(Jetty/Tomcat/Jboss 和其他几个) - 尝试认为您的架构符合开放关闭原则(能够添加对新流编解码器的支持等) - 尝试根据您的限制并使用合同中规定的网络带宽,以运行所需数量的并行用户会话为目标

客户端不会有太大影响,RTSP 似乎是一个类似 REST 的协议,因此您不必维护用户上下文...只需回答传入的请求,看起来很简单的情况...协议似乎不是很丰富(命令集非常有限)....尝试阅读一些可用的不同客户端的源代码。我可以建议您获取标准 Linux 播放器的源代码:

    VLC 播放器 辛

您可能会在这些产品中找到非常有用的代码。 我猜那些已经实现了商业产品的人将无法给你他们的反馈,所以使用开源软件吧!!!

HTH 杰罗姆

【讨论】:

【参考方案2】:

我认为 JMF 包含 RTP / RTCP 类的原因是这些是媒体协议 - 即这些协议描述了媒体如何通过 IP 流式传输以及如何报告流质量(分别)。

RTSP 是一种控制协议 - 它用于设置媒体流。所以这是 JMF 管理的媒体流之上的一层。您可以在任何您喜欢的频道中交换 RTSP 消息,然后使用交换的信息来建立您的媒体流。

尝试在 google 代码项目中搜索 RTSP 实现,好像有一些。

【讨论】:

以上是关于用 Java 实现 RTSP 媒体服务器的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg 代码实现流媒体推流(RTSP)

流媒体协议之RTSP客户端的实现20171014

用vlc搭建rtsp流媒体服务器

用vlc搭建rtsp流媒体服务器

使用Kurento搭建一个流媒体服务器,实现在网页查看Rtsp流

rtmp的媒体流直播能否转换成http,mms,rtsp直播?