aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-10-11 05:33:15 +0000
committerIgor Sysoev <igor@sysoev.ru>2006-10-11 05:33:15 +0000
commita33dafb110e73aaa8a72ca16d7c7a64a2c259f85 (patch)
tree722d3055655d39c56b75b15b04e55661e05d3dae
parent358ec14ce98ee3e6a6f2156496f7f121719f2032 (diff)
downloadnginx-a33dafb110e73aaa8a72ca16d7c7a64a2c259f85.tar.gz
nginx-a33dafb110e73aaa8a72ca16d7c7a64a2c259f85.zip
do not send flv header for full file
-rw-r--r--src/http/modules/ngx_http_flv_module.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/http/modules/ngx_http_flv_module.c b/src/http/modules/ngx_http_flv_module.c
index 7fa736d80..dfe4299ec 100644
--- a/src/http/modules/ngx_http_flv_module.c
+++ b/src/http/modules/ngx_http_flv_module.c
@@ -64,7 +64,7 @@ ngx_http_flv_handler(ngx_http_request_t *r)
off_t start, len;
ngx_fd_t fd;
ngx_int_t rc;
- ngx_uint_t level;
+ ngx_uint_t level, i;
ngx_str_t path;
ngx_err_t err;
ngx_log_t *log;
@@ -163,6 +163,7 @@ ngx_http_flv_handler(ngx_http_request_t *r)
start = 0;
len = ngx_file_size(&fi);
+ i = 1;
if (r->args.len) {
p = (u_char *) ngx_strstr(r->args.data, "start=");
@@ -176,7 +177,10 @@ ngx_http_flv_handler(ngx_http_request_t *r)
start = 0;
}
- len -= start;
+ if (start) {
+ len = sizeof(ngx_flv_header) - 1 + len - start;
+ i = 0;
+ }
}
}
@@ -190,24 +194,26 @@ ngx_http_flv_handler(ngx_http_request_t *r)
clnf->log = r->pool->log;
r->headers_out.status = NGX_HTTP_OK;
- r->headers_out.content_length_n = sizeof(ngx_flv_header) - 1 + len;
+ r->headers_out.content_length_n = len;
r->headers_out.last_modified_time = ngx_file_mtime(&fi);
if (ngx_http_set_content_type(r) != NGX_OK) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
- b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
- if (b == NULL) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
+ if (i == 0) {
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
+ if (b == NULL) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
- b->pos = ngx_flv_header;
- b->last = ngx_flv_header + sizeof(ngx_flv_header) - 1;
- b->memory = 1;
+ b->pos = ngx_flv_header;
+ b->last = ngx_flv_header + sizeof(ngx_flv_header) - 1;
+ b->memory = 1;
- out[0].buf = b;
- out[0].next = &out[1];
+ out[0].buf = b;
+ out[0].next = &out[1];
+ }
b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
@@ -239,7 +245,7 @@ ngx_http_flv_handler(ngx_http_request_t *r)
out[1].buf = b;
out[1].next = NULL;
- return ngx_http_output_filter(r, out);
+ return ngx_http_output_filter(r, &out[i]);
}