RTSP服务器java实现问题:(

2024-04-03

我正在编写 RTSP 服务器并遇到一些问题。 我使用 VLC 作为客户端。

服务器从客户端(VLC 播放器)接收 OPTIONS、DESCRIBE、SETUP 和 PLAY 命令并回答该命令。

通过 SETUP 命令客户端发送端口号,我正在使用该端口发送数据。 当我的服务器收到 PLAY 命令时,它会发送答案并开始传输数据。我正在使用客户端端口创建两个 DatagramSocket 实例。

我正在尝试流式传输 mp4 文件。 我在用着mp4parse http://code.google.com/p/mp4parser/用于获取要流式传输的音频和视频轨道数据的 java 库。

因此,当我在 VLC 上单击“播放”时,它正在连接并开始等待数据,几秒钟后我在 VLC 消息中收到此消息:

live555 warning: no data received in 10s. Switching to TCP

这是我的 SDP 数据:

v=0
o=- 0 0 IN IP4 127.0.0.1
m=video 0 RTP/AVP 96
b=AS:1633
a=rtpmap:96 H264/90000
a=control:trackID=65536
a=fmtp:96 profile-level-id=64001F; packetization-mode=1; sprop-parameter-sets=Z2QAH6zZgFAFuhAAAAMAEAAAAwMg8YMZoA==,aOl7LIs=
a=framesize:96 1280-720
m=audio 0 RTP/AVP 97
b=AS:129
a=rtpmap:97 mpeg4-generic/48000/2
a=control:trackID=65537
a=fmtp:97 profile-level-id=41; config=1190; streamType=5; mode=AAC-hbr; objectType=64; constantDuration=1024; sizeLength=13; indexLength=3; indexDeltaLength=3

另外,我正在使用用于创建 RTP 数据包并发送它们。

这是服务器-客户端通信日志:

+++++++CLIENT+S++++++++++
OPTIONS rtsp://127.0.0.1:4444/aaa RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
+++++++CLIENT+E++++++++++
+++++++SERVER+S++++++++++
RTSP/1.0 200 OK
CSeq: 2
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

+++++++SERVER+E++++++++++
+++++++CLIENT+S++++++++++
DESCRIBE rtsp://127.0.0.1:4444/aaa RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Accept: application/sdp
+++++++CLIENT+E++++++++++
+++++++SERVER+S++++++++++
RTSP/1.0 200 OK
CSeq: 3
Content-Type: application/sdp

v=0
o=- 0 0 IN IP4 127.0.0.1
m=video 0 RTP/AVP 96
b=AS:1633
a=rtpmap:96 H264/90000
a=control:trackID=65536
a=fmtp:96 profile-level-id=64001F; packetization-mode=1; sprop-parameter-sets=Z2QAH6zZgFAFuhAAAAMAEAAAAwMg8YMZoA==,aOl7LIs=
a=framesize:96 1280-720
m=audio 0 RTP/AVP 97
b=AS:129
a=rtpmap:97 mpeg4-generic/48000/2
a=control:trackID=65537
a=fmtp:97 profile-level-id=41; config=1190; streamType=5; mode=AAC-hbr; objectType=64; constantDuration=1024; sizeLength=13; indexLength=3; indexDeltaLength=3

+++++++SERVER+E++++++++++
+++++++CLIENT+S++++++++++
SETUP rtsp://127.0.0.1:4444/aaa/trackID=65536 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Transport: RTP/AVP;unicast;client_port=59298-59299
+++++++CLIENT+E++++++++++
+++++++SERVER+S++++++++++
RTSP/1.0 200 OK
CSeq: 4
Transport: RTP/AVP;unicast;client_port=59298-59299
Session: 00007689

+++++++SERVER+E++++++++++
+++++++CLIENT+S++++++++++
SETUP rtsp://127.0.0.1:4444/aaa/trackID=65537 RTSP/1.0
CSeq: 5
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Transport: RTP/AVP;unicast;client_port=62520-62521
Session: 00007689
+++++++CLIENT+E++++++++++
+++++++SERVER+S++++++++++
RTSP/1.0 200 OK
CSeq: 5
Transport: RTP/AVP;unicast;client_port=62520-62521
Session: 00007689

+++++++SERVER+E++++++++++
+++++++CLIENT+S++++++++++
PLAY rtsp://127.0.0.1:4444/aaa RTSP/1.0
CSeq: 6
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Session: 00007689
Range: npt=0.000-
+++++++CLIENT+E++++++++++
+++++++SERVER+S++++++++++
RTSP/1.0 200 OK
CSeq: 6

+++++++SERVER+E++++++++++
Streaming...
+++++++CLIENT+S++++++++++
TEARDOWN rtsp://127.0.0.1:4444/aaa RTSP/1.0
CSeq: 7
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Session: 00007689
+++++++CLIENT+E++++++++++
+++++++SERVER+S++++++++++
RTSP/1.0 200 OK
CSeq: 7

+++++++SERVER+E++++++++++
Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:168)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
    at java.io.InputStreamReader.read(InputStreamReader.java:167)
    at java.io.BufferedReader.fill(BufferedReader.java:136)
    at java.io.BufferedReader.readLine(BufferedReader.java:299)
    at java.io.BufferedReader.readLine(BufferedReader.java:362)
    at com.vtgsoftwares.ekiz.server.RTSPServer.<init>(RTSPServer.java:71)
    at com.vtgsoftwares.ekiz.server.RTSPServer.main(RTSPServer.java:80)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

有什么想法吗?

Thanks.


在客户端发送 RTSP SETUP 请求后,服务器日志中的 RTSP 对等方应该就“传输”达成一致,作为协议的一部分...

Received 360 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
Session: 70cd7f38;timeout=90
Transport: RTP/AVP;unicast;mode=play;client_port=64498-64499;server_port=10580-10581;source=74.125.212.247;ssrc=50DF166F

您的服务器日志应显示对等方同意 RTCP 和协议数据部分的端口集 (C/S)。

猜测是您的 VLC 客户端不知道在哪里找到要读取的数据流...即我应该等待哪个端口(可读取的数据)。

一些成功的 RTSP 会话的日志:

播放 YouTube RTSP http://snipplr.com/view/56509/youtube-rtsp-cli-request--audio-track-only/:客户端openrtsp

VLC客户端播放RTSP流 http://pastebin.com/2uDn1HSi

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTSP服务器java实现问题:( 的相关文章

随机推荐

  • 季度的天数?

    我将如何实施dayNumber of quarter 例如 3 月 3 日 第一季度 应返回 62 31 一月 28 二月 3 三月 4 月 29 日 第二季度 应返回 29 到目前为止我的代码 int month getMonth dat
  • NSDateFormatter 无法设置 setTimeZone

    我想知道两个日期之间的差异 包括天 小时 分钟和秒 为此 我使用下面的代码 但它不起作用 void UpdateTableViewCellWithNSTimer NSString gameTime UIView inputView NSDa
  • 如何使用 C# MVC4 调用 $.ajax 中的错误函数?

    我有一个使用 C 的 MVC4 项目 在这个项目中 我的一个控制器有一个由 Ajax 函数调用的方法 HttpPost public string EditPackage int id string newPkgName try do lo
  • 锁定数据库记录以进行编辑

    我有一个 SQL Server 2008 数据库和一个 asp net 前端 我想在用户当前正在编辑记录但不确定哪种方法是最佳方法时实现锁定 我的想法是有一个isLocked记录的列 当用户拉出该记录时 它会设置为 true 这意味着所有其
  • 为 Sublime Text 2 的嵌入式 Python 解释器安装 IPython

    我正在尝试在 sublime 中安装 IpythonIntegration 包 我安装在 bash shell 中 最新的 ipython pyzmq pyside 然而 崇高控制台仍然给我一个错误 Reloading plugin hom
  • 如何设置完全离线的 Cordova 构建?

    我使用 Cordova 创建了一个测试项目cordova create hello com example hello HelloWorld cd hello cordova platform add android 我第一次用它构建它co
  • 如何使用 DataContractJsonSerializer 处理 Json?

    我有这样的 json 结构 id 12345 first name dino last name he emails preferred 1 personal 2 business 3 other 4 我想获取电子邮件中的值 所以我写了两个
  • 为什么我不应该将序列化数组插入到我的数据库字段中?

    我刚刚看到这个问题的第一条评论在 PHP 中插入序列化数组 https stackoverflow com questions 3588957 inserting into a serialized array in php这让我想知道为什
  • 从类变量引用静态方法

    我知道有这样的情况是有原因的 但不知何故我有它 class foo static method staticmethod def test pass class variable c name i 有什么办法呢 仅供记录 我相信这应该被视为
  • C++ 抛出取消引用的指针

    下面抛出的异常对象的类型是什么 问题1 gt range error r error throw r 答案1 gt range error 的对象 问题2 gt exception p r throw p 答案2 gt 异常的切片对象 问题
  • 如何根据 RFC 2231 对文件名进行编码?

    我需要在 Content Disposition HTTP 标头属性处对文件附件进行编码 我注意到 RFC 2231 是最新的广泛接受的标准 并且想使用它 然而 我很难在核心 Java SE 和 Java EE 库中找到它的实现 你们有什么
  • 汇编,多个参数 -m32 / linux (与 C 中的 stdarg 相同)

    为了解决这个问题 我了解C 而且我仍然是汇编的初学者 所以我在这里遇到了一个小问题 我在获取多个参数时遇到了一些麻烦 如果我应该这样做的话 也许可以对它们进行计数 并在汇编代码中使用格式参数 尝试向具有许多参数的字符串添加一些字节 我知道如
  • bash.exe:警告:找不到/tmp,请创建

    为什么我的崇高文本给我警告 bash exe 警告 找不到 tmp 请创建 尽管它正在正确构建和运行代码 请帮助我看到这个警告后感到很恼火 我搜索了整个网络 但找不到任何解决方案 此错误消息具有误导性 至少对我来说 创建 tmp 目录后并没
  • Flash / Java Applet 的 NPAPI 插件替代方案

    我的问题是关于 2014 年 12 月后 chrome 宣布不支持 NPAPI 插件 Firefox 也遵循同样的规定 我的一个旧应用程序中有一个基于 NPAPI 的插件 到目前为止该插件运行良好 但在 Chrome 和 Firefox 发
  • 将常规文件复用为 Mpeg TS

    我正在使用 mpeg2 ts 和 ISDB T 综合服务数字广播 地面 的文件广播方法工作 我的问题是我无法将文件放入数据流中 或者作为原始视频 或者在mpeg ts 我使用 ffmpeg 和 avconv 这是一个测试示例 ffmpeg
  • java中的变量定义使用接口还是类型?

    ArrayList aList new ArrayList List aList new ArrayList 这两者有什么区别 哪个更好用 为什么 List 是一个接口 而 ArrayList 是该接口的实现 第二种更好 因为这意味着您可以
  • Firebird ADO.NET 4.10.0.0 数据提供程序是否可以与 Firebird 3.0 一起使用?

    我目前正在尝试将我的 ASP net 4 5 项目连接到最近发布的 Firebird 3 0 我使用的是 Visual Studio 2015 社区版 Firebird 3 64 位 并使用 NuGet 获取 ADO NET 4 10 0
  • 尝试将设备注册到 Bluemix 上的 IBM Mobile First Push 服务时,iOS 应用程序崩溃

    我有一个在 iPad mini 4 iOS 9 0 2 上运行的 iOS 9 应用程序 尝试将设备注册到 Bluemix 上的 IMFPush 服务实例时 它崩溃了 以下是在我的应用程序委托中执行注册的代码 func application
  • 如何在 BigQuery 中选择包含所有 NULL 值的数据列

    如何在 BigQuery 中选择包含所有 NULL 值的数据列 A B C NULL 1 NULL NULL NULL NULL NULL 2 NULL NULL 3 NULL 我想检索 A 列和 C 列 请您帮忙 扩展我对米哈伊尔答案的评
  • RTSP服务器java实现问题:(

    我正在编写 RTSP 服务器并遇到一些问题 我使用 VLC 作为客户端 服务器从客户端 VLC 播放器 接收 OPTIONS DESCRIBE SETUP 和 PLAY 命令并回答该命令 通过 SETUP 命令客户端发送端口号 我正在使用该