// get the rtp timestamp
p = strstr(hdr, "rtptime=");
if (p) {
- p = strchr(p, '=') + 1;
+ p = strchr(p, '=');
if (p) {
- rtptime = uatoi(p); // unsigned integer -- up to 2^32-1
+ rtptime = uatoi(p+1); // unsigned integer -- up to 2^32-1
rtptime--;
// debug(1,"RTSP Flush Requested by handle_record: %u.",rtptime);
player_flush(rtptime);
// get the rtp timestamp
p = strstr(hdr, "rtptime=");
if (p) {
- p = strchr(p, '=') + 1;
+ p = strchr(p, '=');
if (p)
- rtptime = uatoi(p); // unsigned integer -- up to 2^32-1
+ rtptime = uatoi(p+1); // unsigned integer -- up to 2^32-1
}
}
// debug(1,"RTSP Flush Requested: %u.",rtptime);
unsigned int off = 8;
- // inform the listener that a set of metadata is starting
- // this doesn't include the cover art though...
-
- send_metadata('ssnc', 'mdst', NULL, 0, NULL, 1);
-
while (off < cl) {
// pick up the metadata tag as an unsigned longint
uint32_t itag = ntohl(*(uint32_t *)(cp + off));
// move on to the next item
off += vl;
}
-
- // inform the listener that a set of metadata is ending
- send_metadata('ssnc', 'mden', NULL, 0, NULL, 1);
}
#endif
static void handle_set_parameter(rtsp_conn_info *conn, rtsp_message *req, rtsp_message *resp) {
// if (!req->contentlength)
// debug(1, "received empty SET_PARAMETER request.");
+
+ msg_print_debug_headers(req);
char *ct = msg_get_header(req, "Content-Type");
if (ct) {
debug(2, "SET_PARAMETER Content-Type:\"%s\".", ct);
+
#ifdef CONFIG_METADATA
+ // It seems that the rtptime of the message is used as a kind of an ID that can be used
+ // to link items of metadata, including pictures, that refer to the same entity.
+ // If they refer to the same item, they have the same rtptime.
+ // So we send the rtptime before and after both the metadata items and the picture item
+ // get the rtptime
+ char *p = NULL;
+ char *hdr = msg_get_header(req, "RTP-Info");
+
+ if (hdr) {
+ p = strstr(hdr, "rtptime=");
+ if (p) {
+ p = strchr(p, '=');
+ }
+ } else {
+ debug(1,"Missing RTP-Info item in SET_PARAMETER");
+ }
+
+
if (!strncmp(ct, "application/x-dmap-tagged", 25)) {
debug(2, "received metadata tags in SET_PARAMETER request.");
+ if (p)
+ send_metadata('ssnc', 'mdst', p+1, strlen(p+1), req, 1); // metadata starting
handle_set_parameter_metadata(conn, req, resp);
+ if (p)
+ send_metadata('ssnc', 'mden', p+1, strlen(p+1), req, 1); // metadata ending
+
+
} else if (!strncmp(ct, "image", 5)) {
// debug(1, "received image in SET_PARAMETER request.");
// note: the image/type tag isn't reliable, so it's not being sent
// -- best look at the first few bytes of the image
+ if (p)
+ send_metadata('ssnc', 'mdst', p+1, strlen(p+1), req, 1); // metadata starting
send_metadata('ssnc', 'PICT', req->content, req->contentlength, req, 1);
+ if (p)
+ send_metadata('ssnc', 'mden', p+1, strlen(p+1), req, 1); // metadata ending
} else
#endif
if (!strncmp(ct, "text/parameters", 15)) {
debug(2, "received parameters in SET_PARAMETER request.");
- handle_set_parameter_parameter(conn, req, resp);
+ handle_set_parameter_parameter(conn, req, resp); // this could be volume or progress
} else {
debug(1, "received unknown Content-Type \"%s\" in SET_PARAMETER request.", ct);
- }
+ }
} else {
debug(1, "missing Content-Type header in SET_PARAMETER request.");
}