Search squid archive

Re: anyone knows some info about youtube "range" parameter?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

On Thursday 26 April 2012 10:15:33 johan firdianto wrote:
> This range behaviour related with error occured in youtube flash player ?
> i'm using url rewrite if any range parameter in uri videos, i stripp off.
> i can save the whole file of video to directory, by parsing store.log
> and retrieve the same video using curl/wget.
> The problem, when the same video is requested, and my rewrite script
> issues 302  to the file that directory located (under web directory
> using nginx).
> error occured message appears in flash player.
> I refresh many times, still error occured, unless i choose different
> quality (example: 480p or 240p).
> any suggest ?

Errors during video playback were the reason I had to do research about range
in the first place. Simply accepting the range-parameter didn't work for
obvious reasons: because the cached object was constantly overwritten by 
subsequent chunks.

Stripping the range-parameter didn't work well either for me, because 
youtube's flash player expected a chunk but got the whole file. This also
resulted in an error for me.

The only solution to work was adding the range-parameter to the filenames
of the stored files as seen in my nginx configuration in my previous e-mail.

And this solution works currently, and because the range-parameters are
predictable with simple playback, we also experience a caching and thus
bandwidth saving effect. Bandwidth saving is seen by two effects: a) serving
a user from cache, and b) if a user interrupts video playback (clicking from
one video to another) we only have downloaded a certain number of chunks
and not the whole video.

HTH,
- Christian Loth


> 
> 
> On Thu, Apr 26, 2012 at 2:41 PM, Christian Loth
> 
> <c.loth@xxxxxxxxxxxxxxxxxxx> wrote:
> > Hi,
> >
> > On Thursday 26 April 2012 03:44:58 Eliezer Croitoru wrote:
> >> as i already answered a detailed answer to Ghassan.
> >> i think that caching the chunks if possible is pretty good thing.
> >> i tried it with nginx but havnt got the option to try it with
> >> store_url_rewrite.
> >
> > To maybe save you some work, here's how I did it. First of all, I use
> > nginx as a cache-peer - so no URL rewriting script. Excerpt of my
> > squid.conf:
> >
> >
> > acl youtube_videos url_regex -i
> > ^http://[^/]+(\.youtube\.com|\.googlevideo\.com|\.video\.google\.com)/(vi
> >deoplayback|get_video|videodownload)\? acl range_request req_header Range
> > .
> > acl begin_param url_regex -i [?&]begin=
> > acl id_param url_regex -i [?&]id=
> > acl itag_param url_regex -i [?&]itag=
> > acl sver3_param url_regex -i [?&]sver=3
> > cache_peer 127.0.0.1 parent 8081 0 proxy-only no-query connect-timeout=5
> > no-digest cache_peer_access 127.0.0.1 allow youtube_videos id_param
> > itag_param sver3_param !begin_param !range_request cache_peer_access
> > 127.0.0.1 deny all
> >
> > Small note: the range request in this configuration that is denied is the
> > HTTP-Range-Header, not the range URL parameter! Nginx is of course
> > running on port 8081 on the same server.
> >
> > The important configuration directive in nginx is as follows:
> >
> > server {
> >        listen       127.0.0.1:8081;
> >
> >        location / {
> >                root   /var/cache/proxy/nginx/files;
> >                try_files
> > "/id=$arg_id.itag=$arg_itag.range=$arg_range.algo=$arg_algorithm"
> > @proxy_youtube; }
> >
> >        location @proxy_youtube {
> >                resolver 134.99.128.2;
> >                proxy_pass http://$host$request_uri;
> >                proxy_temp_path "/var/cache/proxy/nginx/tmp";
> >                proxy_ignore_client_abort off;
> >                proxy_store
> > "/var/cache/proxy/nginx/files/id=$arg_id.itag=$arg_itag.range=$arg_range.
> >algo=$arg_algorithm"; proxy_set_header X-YouTube-Cache
> > "c.loth@xxxxxxxxxxxxxxxxxxx"; proxy_set_header Accept "video/*";
> >                proxy_set_header User-Agent "YouTube Cache (nginx)";
> >                proxy_set_header Accept-Encoding "";
> >                proxy_set_header Accept-Language "";
> >                proxy_set_header Accept-Charset "";
> >                proxy_set_header Cache-Control "";
> >        }
> > }
> >
> > This way, the setup works. Perhaps anyone of you even has a piece of
> > advice for improving it? E.g. I'm still looking for a way to log nginx
> > proxy_store hits and misses...?
> >
> > Best regards,
> > - Christian Loth
> 


[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux