通过RTSP流式传输MP4视频

时间:2017-03-11 19:04:32

标签: video rtsp

我有自己编程的RTSP服务器。有MP4视频文件。 RTSP服务器的客户端是VLC媒体播放器。这是媒体播放器和服务器之间的消息:

OPTIONS rtsp://192.168.1.6:5554/camera RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)

RTSP/1.0 200 OK
Session: 698955009;timeout=60
Expires: 0
Server: RTSP Camera Server (Android) ver. 1.8
Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER,SET_PARAMETER
Cache-Control: no-cache

DESCRIBE rtsp://192.168.1.6:5554/camera RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Accept: application/sdp

RTSP/1.0 200 OK
Content-Base: rtsp://192.168.1.6:5554/camera
Content-Length: 269
Session: 698955009;timeout=60
Expires: 0
Content-Type: application/sdp
Server: RTSP Camera Server (Android) ver. 1.8
Cache-Control: no-cache

v=2
o=- 0 0 IN IP4 192.168.1.6
s=RTSP_CAMERA
i=jpeg
c=IN IP4 192.168.1.6
t=0 0
a=recvonly
m=video 0 RTP/AVP 26
a=rtpmap:26 JPEG/90000
a=control:trackID=0
a=fmtp:26 packetization-mode=1;profile-level-id=640029;sprop-parameter-sets=Z2QAKawbGsBQBbk=,aOpDyw==;

SETUP rtsp://192.168.1.6:5554/camera/trackID=0 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1

RTSP/1.0 200 OK
Transport: RTP/AVP/TCP;unicast;ssrc=1337;interleaved=0-1;mode=play
Session: 698955009;timeout=60
Server: RTSP Camera Server (Android) ver. 1.8
Cache-Control: no-cache
Expires: 0

PLAY rtsp://192.168.1.6:5554/camera RTSP/1.0
CSeq: 5
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Session: 698955009
Range: npt=0.000-

RTSP/1.0 200 OK
Session: 698955009;timeout=60
Server: RTSP Camera Server (Android) ver. 1.8
Cache-Control: no-cache
Expires: 0

在我的情况下,内容说明无效。描述了MJPEG而不是视频。

第一个问题。如何创建正确的媒体流描述(DESCRIBE响应)?有没有有效的教程?

第二个问题。如何正确编码视频帧和标题?我讲了教程here,但是有问题。那是我提交视频的代码:

// creating header
int Version = 2, Padding = 0, Extension = 0, Csrc = 0, Marker = 1, Ssrc = 0, SequenceNumber = 0, TimeStamp = 90000, PayloadType = 96;
SequenceNumber++;
header[0] = (byte) (Version << 6 | Padding << 5 | Extension << 4 | Csrc);
header[1] = (byte) (Marker << 7 | PayloadType);
header[2] = (byte) (SequenceNumber >> 8);
header[3] = (byte) (SequenceNumber & 255);
header[4] = (byte) (TimeStamp >> 24);
header[5] = (byte) (TimeStamp >> 16 & 255);
header[6] = (byte) (TimeStamp >> 8 & 255);
header[7] = (byte) (TimeStamp & 255);
header[8] = (byte) (Ssrc >> 24);
header[9] = (byte) (Ssrc >> 16 & 255);
header[10] = (byte) (Ssrc >> 8 & 255);
header[11] = (byte) (Ssrc & 255);
out.write(header); // send header
out.flush();
...
out.write(...); // send video
out.flush();

没有什么可以回到客户端。 VLC没有向我显示任何错误,它只是通过关闭套接字来停止加载视频。

主要问题是我不知道如何通过RTSP播放MP4视频。

如果不可能,那就不会是最糟糕的了。我可以将所有JPEG图片从视频中弹出到MJPEG文件和单独的原始音频。也许最好使用带有2个流的UDP协议:MJPEG视频+原始音频。请告诉我好的解决方案。

0 个答案:

没有答案