[dancer-users] Detecting disconnected HTTP clients during streamed output
Nicola Worthington
nicolaw at tfb.net
Sat Dec 21 12:57:29 GMT 2013
That's certainly a possibility, but since this app is primarily aimed at
mobile devices that will be landing directly on stream URLs (for the most
part not launched from their browser but through a handful of other apps
that will simply make a call to the OS to open a URL for them to stream
media directly) it would make this approach less than idea and not as
robust as I was hoping for. :(
On 21 December 2013 03:52, Matthew Mallard <mqm at q-technologies.com.au>wrote:
> Just an idea.
>
> Why don't you use ajax and only allow on conversion per user at a time.
> You can create an ajax query to check on progress, plus the user can
> cancel. Basically detach the conversion from the web client, but allow
> client to check on progress and have access to the file when it has
> finished.
>
>
> On 21/12/2013 5:40 am, Nicola Worthington wrote:
>
> I have a handler that transcodes video files using ffmpeg which all works
> fine. However, if the web client disconnects or otherwise stops reading
> from the socket, my handler will continue reading from the ffmpeg
> filehandle and writing out to the writer object until ffmpeg has completed
> the transcode.
>
> This wouldn't be a problem is we lived in a perfect world where every
> web client would send a single request to a URL and not make additional
> requests until the first one had been completed, but of course we don't
> live in an ideal world,.. and I would prefer my webapp not kill the server
> it is running on my spawning off more CPU intensive processes than
> necessary.
>
> Is there any way for me to determine how much data is sat waiting to be
> flushed to the web client so that if it exceeded a predetermined number of
> bytes I can assume that I should kill my ffmpeg file handle and exit the
> handler prematurely,.. or any other way to determine if the web client has
> gone away?
>
> Apologies if I haven't explained myself especially articulately.
>
> This is the handler in question:
>
> *get '/stream/:file/:format' => sub {*
> * my $file = params->{file};*
> * my $format = params->{format};*
>
> * return send_file(*
> * 'favicon.ico',*
> * streaming => 1,*
> * callbacks => {*
> * override => sub {*
> * my ($respond, $response) = @_;*
>
> * my $mime = 'video/mp4';*
> * my @ffmpeg_args = qw(-threads 0 -i $file);*
>
> * if (exists $ffmpeg_formats{$format}) {*
> * $mime = 'video/' . $format;*
> * push @ffmpeg_args, @{$ffmpeg_formats{$format}};*
> * } else {*
> * push @ffmpeg_args, @{$ffmpeg_formats{mp4}};*
> * }*
> * push @ffmpeg_args, '-';*
>
> * my $writer = $respond->([200, ['Content-Type' =>
> $mime]]);*
> * open(my $fh, '-|', join(' ', '/usr/bin/ffmpeg',
> @ffmpeg_args));*
> * my $buffer;*
> * while (read($fh, $buffer, 1024) ) {*
> * $writer->write($buffer);*
> * }*
> * close($fh);*
> * },*
> * },*
> * );*
> *};*
>
>
> --
> Nicola Worthington
> nicolaw at tfb.net
>
>
>
> _______________________________________________
> dancer-users mailing listdancer-users at dancer.pmhttp://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>
>
>
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>
>
--
Nicola Worthington
+44 (0)3333 406 333
nicolaw at tfb.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.preshweb.co.uk/pipermail/dancer-users/attachments/20131221/8b64b974/attachment.html>
More information about the dancer-users
mailing list