Return a proper Content-Type when streaming videos
Clients like Front Row expect video/<type> for video streaming, whereas iTunes likes application/x-dmap-tagged when streaming audio. Based on a patch by Ace Jones <ace.jones1@yahoo.com>.
This commit is contained in:
parent
df2cbea9b2
commit
b9e7df5be3
22
src/httpd.c
22
src/httpd.c
|
@ -397,7 +397,27 @@ httpd_stream_file(struct evhttp_request *req, int id)
|
|||
}
|
||||
st->offset = offset;
|
||||
|
||||
if (!evhttp_find_header(req->output_headers, "Content-Type") && mfi->type)
|
||||
/* Content-Type for video files is different than for audio files
|
||||
* and overrides whatever may have been set previously, like
|
||||
* application/x-dmap-tagged when we're speaking DAAP.
|
||||
*/
|
||||
if (mfi->has_video)
|
||||
{
|
||||
/* Front Row and others expect video/<type> */
|
||||
ret = snprintf(buf, sizeof(buf), "video/%s", mfi->type);
|
||||
if ((ret < 0) || (ret >= sizeof(buf)))
|
||||
DPRINTF(E_LOG, L_HTTPD, "Content-Type too large for buffer, dropping\n");
|
||||
else
|
||||
{
|
||||
evhttp_remove_header(req->output_headers, "Content-Type");
|
||||
evhttp_add_header(req->output_headers, "Content-Type", buf);
|
||||
}
|
||||
}
|
||||
/* If no Content-Type has been set and we're streaming audio, add a proper
|
||||
* Content-Type for the file we're streaming. Remember DAAP streams audio
|
||||
* with application/x-dmap-tagged as the Content-Type (ugh!).
|
||||
*/
|
||||
else if (!evhttp_find_header(req->output_headers, "Content-Type") && mfi->type)
|
||||
{
|
||||
ret = snprintf(buf, sizeof(buf), "audio/%s", mfi->type);
|
||||
if ((ret < 0) || (ret >= sizeof(buf)))
|
||||
|
|
|
@ -1907,7 +1907,10 @@ daap_request(struct evhttp_request *req)
|
|||
|
||||
evhttp_add_header(req->output_headers, "Accept-Ranges", "bytes");
|
||||
evhttp_add_header(req->output_headers, "DAAP-Server", "forked-daapd/" VERSION);
|
||||
/* Content-Type for all replies, even the actual streaming */
|
||||
/* Content-Type for all replies, even the actual audio streaming. Note that
|
||||
* video streaming will override this Content-Type with a more appropriate
|
||||
* video/<type> Content-Type as expected by clients like Front Row.
|
||||
*/
|
||||
evhttp_add_header(req->output_headers, "Content-Type", "application/x-dmap-tagged");
|
||||
|
||||
daap_handlers[handler].handler(req, evbuf, uri_parts, &query);
|
||||
|
|
Loading…
Reference in New Issue