Add support for MPEG2 audio in RTSP streamer

This commit is contained in:
Andreas Öman 2009-11-18 20:42:16 +00:00
parent dade35a931
commit b8b8b3e5b1
3 changed files with 63 additions and 0 deletions

View file

@ -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);
}

View file

@ -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_ */

View file

@ -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;
}
}