Add support for MPEG2 audio in RTSP streamer
This commit is contained in:
parent
dade35a931
commit
b8b8b3e5b1
3 changed files with 63 additions and 0 deletions
51
src/rtp.c
51
src/rtp.c
|
@ -89,3 +89,54 @@ rtp_send_mpv(rtp_send_t *sender, void *opaque, rtp_stream_t *rs,
|
|||
}
|
||||
assert(len == 0);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
rtp_send_mpa(rtp_send_t *sender, void *opaque, rtp_stream_t *rs,
|
||||
const uint8_t *data, size_t len,
|
||||
int64_t pts)
|
||||
{
|
||||
int payloadsize = RTP_MAX_PACKET_SIZE - (4 + 4 + 4 + 4);
|
||||
int offset = 0, s;
|
||||
uint8_t *buf;
|
||||
|
||||
pts = av_rescale_q(pts, AV_TIME_BASE_Q, mpeg_tc);
|
||||
|
||||
while(len > 0) {
|
||||
|
||||
s = len > payloadsize ? payloadsize : len;
|
||||
|
||||
buf = rs->rs_buf;
|
||||
buf[0] = 0x80;
|
||||
buf[1] = 14;
|
||||
buf[2] = rs->rs_seq >> 8;
|
||||
buf[3] = rs->rs_seq;
|
||||
|
||||
buf[4] = pts >> 24;
|
||||
buf[5] = pts >> 16;
|
||||
buf[6] = pts >> 8;
|
||||
buf[7] = pts;
|
||||
|
||||
buf[8] = 0;
|
||||
buf[9] = 0;
|
||||
buf[10] = 0;
|
||||
buf[11] = 0;
|
||||
|
||||
buf[12] = 0;
|
||||
buf[13] = 0;
|
||||
buf[14] = offset >> 8;
|
||||
buf[15] = offset;
|
||||
|
||||
memcpy(buf + 16, data, s);
|
||||
|
||||
len -= s;
|
||||
data += s;
|
||||
|
||||
sender(opaque, buf, s + 16);
|
||||
rs->rs_seq++;
|
||||
|
||||
offset += s;
|
||||
|
||||
}
|
||||
assert(len == 0);
|
||||
}
|
||||
|
|
|
@ -33,4 +33,7 @@ typedef struct rtp_stream {
|
|||
void rtp_send_mpv(rtp_send_t *sender, void *opaque, rtp_stream_t *rs,
|
||||
const uint8_t *data, size_t len, int64_t pts);
|
||||
|
||||
void rtp_send_mpa(rtp_send_t *sender, void *opaque, rtp_stream_t *rs,
|
||||
const uint8_t *data, size_t len, int64_t pts);
|
||||
|
||||
#endif /* RTP_H_ */
|
||||
|
|
|
@ -428,6 +428,10 @@ rtsp_streaming_send(rtsp_t *rtsp, th_pkt_t *pkt)
|
|||
rtp_send_mpv(rs->rs_sender, rs, &rs->rs_rtp, pkt->pkt_payload,
|
||||
pkt->pkt_payloadlen, pkt->pkt_pts);
|
||||
break;
|
||||
case SCT_MPEG2AUDIO:
|
||||
rtp_send_mpa(rs->rs_sender, rs, &rs->rs_rtp, pkt->pkt_payload,
|
||||
pkt->pkt_payloadlen, pkt->pkt_pts);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -681,6 +685,11 @@ rtsp_cmd_describe(http_connection_t *hc, rtsp_t *rtsp)
|
|||
"m=video 0 RTP/AVP 32\r\n"
|
||||
"a=control:streamid=%d\r\n", ssc->ssc_index);
|
||||
break;
|
||||
case SCT_MPEG2AUDIO:
|
||||
tvh_strlcatf(sdp, sizeof(sdp),
|
||||
"m=audio 0 RTP/AVP 14\r\n"
|
||||
"a=control:streamid=%d\r\n", ssc->ssc_index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue