Welcome! Log In Create A New Profile

Advanced

Re: Video Streaming using non http backend, Ref ngx_drizzle

agentzh
June 04, 2012 10:14AM
Hello!

On Mon, Jun 4, 2012 at 10:01 AM, Sammy Raul <sammyraul1@gmail.com> wrote:
> I am trying to stream video it can be mp4, flv anything using nginx.
>
> The video streams in the form of 1024 size will be available from the
> backend non-http server.
>

I think this can be done trivially via ngx_lua module while still
achieving good performance. Here is a small example that demonstrates
how to meet your requirements with a little Lua:

location /api {
content_by_lua '
local sock, err = ngx.socket.tcp()
if not sock then
ngx.log(ngx.ERR, "failed to get socket: ", err)
ngx.exit(500)
end

sock:settimeout(1000) -- 1 sec

local ok, err = sock:connect("some.backend.host", 12345)
if not ok then
ngx.log(ngx.ERR, "failed to connect to upstream: ", err)
ngx.exit(502)
end

local bytes, err = sock:send("some query")
if not bytes then
ngx.log(ngx.ERR, "failed to send query: ", err)
ngx.exit(502)
end

while true do
local data, err, partial = sock:receive(1024)
if not data then
if err == "closed" then
if partial then
ngx.print(partial)
ngx.eof()
ngx.exit(ngx.OK)
end
else
ngx.log(ngx.ERR, "error reading data: ", err)
ngx.exit(502)
end
else
ngx.print(data)
ngx.flush(true)
end
end
';
}

See the documentation for details:

http://wiki.nginx.org/HttpLuaModule

> For achieveing this I followed the ngx_http_drizzle source.
>
> I wrote an upstream handler and followed most of the source code from
> ngx_http_drizzle.
>

As the author of ngx_drizzle, I suggest you start from trying out
ngx_lua. Customizing ngx_drizzle for your needs requires a *lot* of
work. The C approach should only be attempted when Lua is indeed too
slow for your purpose, which is not very likely for many applications
though.

Also, please note that ngx_drizzle does not support strict
non-buffered data output. So, for downstream connections that are slow
to write, data will still accumulate in RAM without control. On the
other hand, the ngx_lua sample given above does not suffer from this
issue.

> I have few questions or to be more precise I did not understood how the
> output from drizzle is being streamed to the client.
>
> 1) In ngx_http_drizzle_output.c the function ngx_http_drizzle_submit_mem is
> the place where it is setting the output filter, Is it also sending the
> response i.e the stream to the client at this point, or it is some other
> function?
>

Nope. Sending output buffers to the output filter chain is done by the
ngx_http_drizzle_output_bufs function.

> 2) What I need to do to send my video contents to the client, I followed the
> drizzle example but setting output and sending stream to the client, how I
> can achieve this. I have 1024B avaialble at one point and I want to send
> this to the client till the backend server has no stream to send and the
> client should be able to play the content.
>

Basically, you can call the ngx_http_output_filter function, just as
other nginx upstream modules.

> 3) Is it possible to send the video stream to the client with the browser.
>

I do not quite follow this question.

Best regards,
-agentzh

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

Video Streaming using non http backend, Ref ngx_drizzle

Sammy Raul June 03, 2012 10:02PM

Re: Video Streaming using non http backend, Ref ngx_drizzle

sammy_raul June 04, 2012 04:16AM

Re: Video Streaming using non http backend, Ref ngx_drizzle

agentzh June 04, 2012 10:14AM

Re: Video Streaming using non http backend, Ref ngx_drizzle

sammy_raul June 05, 2012 12:08AM

Re: Video Streaming using non http backend, Ref ngx_drizzle

agentzh June 05, 2012 12:18AM

Re: Video Streaming using non http backend, Ref ngx_drizzle

sammy_raul June 12, 2012 03:02AM

Re: Video Streaming using non http backend, Ref ngx_drizzle

agentzh June 12, 2012 07:44AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 225
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready