|
Как выяснилось в стабильной версии nginx ( 0.6 ) содержится баг в модуле для работы с flv. Собственно проблема в том что кроме параметра start другие параметры никак не обрабатываются и их наличие вызывает неправильную работу модуля. Вот собственно проблемный код: start = 0; len = of.size; i = 1; if (r->args.len) { p = (u_char *) ngx_strnstr(r->args.data, "start=", r->args.len); if (p) { p += 6; start = ngx_atoof(p, r->args.len - (p - r->args.data)); if (start == NGX_ERROR || start >= len) { start = 0; } if (start) { len = sizeof(ngx_flv_header) - 1 + len - start; i = 0; } } } Как видите по коду если добавить ещё пару параметров в гет запрос - это код работать не будет.В логе изменений это баг исправлен в 0.7.6 (Исправление: модуль ngx_http_flv_module не поддерживал несколько значений в аргументах запроса) . Но 0.7 ветка нестабильная ... Мне вот чего-то не захотелось рисковать =) Для начала я взял полностью модуль от последней версии - как выяснилось от новой версии к старой модули не подходят =) Поковырялся и выдрал из новой версии код:
start = 0; len = of.size; i = 1;
if (r->args.len) { p = (u_char *) ngx_strnstr(r->args.data, "start=", r->args.len);
if (p) { p += 6;
for (n = p; n < r->args.data + r->args.len; n++) { if (*n == '&') { break; } }
start = ngx_atoof(p, n - p);
if (start == NGX_ERROR || start >= len) { start = 0; }
if (start) { len = sizeof(ngx_flv_header) - 1 + len - start; i = 0; } } }
Все прекрасно работает после описания типа для переменной n в процедуре static ngx_int_t ngx_http_flv_handler(ngx_http_request_t *r)
(делается это так :меняем u_char *p, *last; на u_char *p, *n, *last; )
=)))
|