live555 RTSP服务器如何实现快进 拖动播放等功能

时间:2022-01-06 20:05:52
如题,用live555实现了rtsp服务器和客户端,可以播放视频文件(h264),但是只能正常速度播放,请问:rtsp服务端如何实现快进快退和拖动进度条播放?

11 个解决方案

#1


拖动用PLAY方法实现,相当于再找一个播放点。
快进需要加一个rtsp头scale。Scale头域表示播放或记录速度。值为1表示正常播放速度,0.5表示一半播放速度,2表示2倍播放速度。负值表示反方向播放。请求头中包含的速度如果超出了服务器允许范围,则在反馈头中会给出实际速度。
Scale: -3.5

下面是拖动的例子
PLAY方法告诉服务器按照SETUP方法中的设置开始传送媒体流,在SETUP方法被调用前,不能调用PLAY方法。PLAY请求中带有Range头,用于表示播放的范围。如果不带有Range头则默认从头播到尾。当播放到达Range尾时,会自动停止,就像调用了一个PAUSE命令。
PLAY命令可以连续调用,在服务器端会将多个PLAY命令进行队列管理。在同一时间只能有一个PLAY命令被执行,只有第一个PLAY命令执行完毕,第二个PLAY命令才能被执行。如下例所示,服务器会先播放10-15秒,再播放20-25秒,最后播放30-结尾。PLAY还可以带有time参数,用于在制定时间播放。这样做可以同步多个数据流。
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 835
Session: 12345678
Range: npt=10-15

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 836
Session: 12345678
Range: npt=20-25

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 837
Session: 12345678
Range: npt=30-

C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
CSeq: 833
Session: 12345678
Range: smpte=0:10:20-;time=19970123T153600Z

S->C: RTSP/1.0 200 OK
CSeq: 833
Date: 23 Jan 1997 15:35:06 GMT
Range: smpte=0:10:22-;time=19970123T153600Z

#2


普京说的好!

#3


引用 1 楼 yhc223 的回复:
拖动用PLAY方法实现,相当于再找一个播放点。
快进需要加一个rtsp头scale。Scale头域表示播放或记录速度。值为1表示正常播放速度,0.5表示一半播放速度,2表示2倍播放速度。负值表示反方向播放。请求头中包含的速度如果超出了服务器允许范围,则在反馈头中会给出实际速度。
Scale: -3.5

下面是拖动的例子
PLAY方法告诉服务器按照SETUP方法中的设置开始传送媒体流,在SETUP方法被调用前,不能调用PLAY方法。PLAY请求中带有Range头,用于表示播放的范围。如果不带有Range头则默认从头播到尾。当播放到达Range尾时,会自动停止,就像调用了一个PAUSE命令。
PLAY命令可以连续调用,在服务器端会将多个PLAY命令进行队列管理。在同一时间只能有一个PLAY命令被执行,只有第一个PLAY命令执行完毕,第二个PLAY命令才能被执行。如下例所示,服务器会先播放10-15秒,再播放20-25秒,最后播放30-结尾。PLAY还可以带有time参数,用于在制定时间播放。这样做可以同步多个数据流。
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 835
Session: 12345678
Range: npt=10-15

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 836
Session: 12345678
Range: npt=20-25

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 837
Session: 12345678
Range: npt=30-

C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
CSeq: 833
Session: 12345678
Range: smpte=0:10:20-;time=19970123T153600Z

S->C: RTSP/1.0 200 OK
CSeq: 833
Date: 23 Jan 1997 15:35:06 GMT
Range: smpte=0:10:22-;time=19970123T153600Z



我是C++写的服务器和客户端,你的意思是只要修改一下客户端发送给服务端的PLAY命令中某些参数就可以达到快进和拖拽的效果吗?服务端代码不需要修改吗?

#4


服务器支持标准协议,我说的命令都是rtsp标准命令,所以只需要修改客户端就可以了,服务器不需要改。

#5


引用 4 楼 yhc223 的回复:
服务器支持标准协议,我说的命令都是rtsp标准命令,所以只需要修改客户端就可以了,服务器不需要改。


我在客户端调用发送PLAY命令的接口时:
rtspClient->sendPlayCommand(session, responseHandler,0,-1,2);


从头播放到尾,播放速度是2,但是播放速度并没有变快,我调试了一下服务端代码,发现接收到的包里,scale是2,不过服务端经过一些处理之后scale又变成1了,所以速度没变快。这是为什么?我用的服务端是live555MediaServer,这个服务器是不是没有实现速度控制等功能?我应该在这个服务器上做什么修改?

谢谢 期待回答

#6


需要服务端改代码,改变发送速度

#7


引用 6 楼 rightorwrong 的回复:
需要服务端改代码,改变发送速度


发送速度怎么改变?服务端需要重写那个类呢?纯新手 看了几天也没看出来 

#8


你试一下darwin流媒体服务器,这个应该是支持的

#9


引用 8 楼 yhc223 的回复:
你试一下darwin流媒体服务器,这个应该是支持的


我要开发的就是流媒体服务器,使用live555开发自己的流媒体服务器,现在的问题是我的服务器不支持快速播放和拖动。我想请教重写live555的那部分代码可以实现这些功能。谢谢

#10


不知道解决了没有,live555不支持裸流的跳转,需要封装成某种文件才可以,live555主页有说明的
'Trick play' functionality

The server supports RTSP 'trick play' operations for some, but not all, media types:
Pausing: All media types
Seeking: MPEG Transport Streams; DV video; WAV (PCM) audio; MPEG-1 or 2 audio; MPEG-1 or 2 Program Streams (partially working); Matroska or WebM files
Fast forward: MPEG Transport Streams; WAV (PCM) audio; MPEG-1 or 2 audio
Reverse play: MPEG Transport Streams; WAV (PCM) audio
Note that in order to provide 'trick play' operations for a streamed MPEG Transport Stream file, a special 'index file' must created for each such file, using our "MPEG2TransportStreamIndexer" tool.
Trick play support for additional media types will be added in the future.

#11


不错啊...

#1


拖动用PLAY方法实现,相当于再找一个播放点。
快进需要加一个rtsp头scale。Scale头域表示播放或记录速度。值为1表示正常播放速度,0.5表示一半播放速度,2表示2倍播放速度。负值表示反方向播放。请求头中包含的速度如果超出了服务器允许范围,则在反馈头中会给出实际速度。
Scale: -3.5

下面是拖动的例子
PLAY方法告诉服务器按照SETUP方法中的设置开始传送媒体流,在SETUP方法被调用前,不能调用PLAY方法。PLAY请求中带有Range头,用于表示播放的范围。如果不带有Range头则默认从头播到尾。当播放到达Range尾时,会自动停止,就像调用了一个PAUSE命令。
PLAY命令可以连续调用,在服务器端会将多个PLAY命令进行队列管理。在同一时间只能有一个PLAY命令被执行,只有第一个PLAY命令执行完毕,第二个PLAY命令才能被执行。如下例所示,服务器会先播放10-15秒,再播放20-25秒,最后播放30-结尾。PLAY还可以带有time参数,用于在制定时间播放。这样做可以同步多个数据流。
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 835
Session: 12345678
Range: npt=10-15

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 836
Session: 12345678
Range: npt=20-25

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 837
Session: 12345678
Range: npt=30-

C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
CSeq: 833
Session: 12345678
Range: smpte=0:10:20-;time=19970123T153600Z

S->C: RTSP/1.0 200 OK
CSeq: 833
Date: 23 Jan 1997 15:35:06 GMT
Range: smpte=0:10:22-;time=19970123T153600Z

#2


普京说的好!

#3


引用 1 楼 yhc223 的回复:
拖动用PLAY方法实现,相当于再找一个播放点。
快进需要加一个rtsp头scale。Scale头域表示播放或记录速度。值为1表示正常播放速度,0.5表示一半播放速度,2表示2倍播放速度。负值表示反方向播放。请求头中包含的速度如果超出了服务器允许范围,则在反馈头中会给出实际速度。
Scale: -3.5

下面是拖动的例子
PLAY方法告诉服务器按照SETUP方法中的设置开始传送媒体流,在SETUP方法被调用前,不能调用PLAY方法。PLAY请求中带有Range头,用于表示播放的范围。如果不带有Range头则默认从头播到尾。当播放到达Range尾时,会自动停止,就像调用了一个PAUSE命令。
PLAY命令可以连续调用,在服务器端会将多个PLAY命令进行队列管理。在同一时间只能有一个PLAY命令被执行,只有第一个PLAY命令执行完毕,第二个PLAY命令才能被执行。如下例所示,服务器会先播放10-15秒,再播放20-25秒,最后播放30-结尾。PLAY还可以带有time参数,用于在制定时间播放。这样做可以同步多个数据流。
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 835
Session: 12345678
Range: npt=10-15

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 836
Session: 12345678
Range: npt=20-25

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 837
Session: 12345678
Range: npt=30-

C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
CSeq: 833
Session: 12345678
Range: smpte=0:10:20-;time=19970123T153600Z

S->C: RTSP/1.0 200 OK
CSeq: 833
Date: 23 Jan 1997 15:35:06 GMT
Range: smpte=0:10:22-;time=19970123T153600Z



我是C++写的服务器和客户端,你的意思是只要修改一下客户端发送给服务端的PLAY命令中某些参数就可以达到快进和拖拽的效果吗?服务端代码不需要修改吗?

#4


服务器支持标准协议,我说的命令都是rtsp标准命令,所以只需要修改客户端就可以了,服务器不需要改。

#5


引用 4 楼 yhc223 的回复:
服务器支持标准协议,我说的命令都是rtsp标准命令,所以只需要修改客户端就可以了,服务器不需要改。


我在客户端调用发送PLAY命令的接口时:
rtspClient->sendPlayCommand(session, responseHandler,0,-1,2);


从头播放到尾,播放速度是2,但是播放速度并没有变快,我调试了一下服务端代码,发现接收到的包里,scale是2,不过服务端经过一些处理之后scale又变成1了,所以速度没变快。这是为什么?我用的服务端是live555MediaServer,这个服务器是不是没有实现速度控制等功能?我应该在这个服务器上做什么修改?

谢谢 期待回答

#6


需要服务端改代码,改变发送速度

#7


引用 6 楼 rightorwrong 的回复:
需要服务端改代码,改变发送速度


发送速度怎么改变?服务端需要重写那个类呢?纯新手 看了几天也没看出来 

#8


你试一下darwin流媒体服务器,这个应该是支持的

#9


引用 8 楼 yhc223 的回复:
你试一下darwin流媒体服务器,这个应该是支持的


我要开发的就是流媒体服务器,使用live555开发自己的流媒体服务器,现在的问题是我的服务器不支持快速播放和拖动。我想请教重写live555的那部分代码可以实现这些功能。谢谢

#10


不知道解决了没有,live555不支持裸流的跳转,需要封装成某种文件才可以,live555主页有说明的
'Trick play' functionality

The server supports RTSP 'trick play' operations for some, but not all, media types:
Pausing: All media types
Seeking: MPEG Transport Streams; DV video; WAV (PCM) audio; MPEG-1 or 2 audio; MPEG-1 or 2 Program Streams (partially working); Matroska or WebM files
Fast forward: MPEG Transport Streams; WAV (PCM) audio; MPEG-1 or 2 audio
Reverse play: MPEG Transport Streams; WAV (PCM) audio
Note that in order to provide 'trick play' operations for a streamed MPEG Transport Stream file, a special 'index file' must created for each such file, using our "MPEG2TransportStreamIndexer" tool.
Trick play support for additional media types will be added in the future.

#11


不错啊...