Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Streaming media with net/http
William Spitzer
9/22/2008 6:25:00 PM
So I was wondering how one would capture a continuous stream of data
(for instance a net radio station or a webcam) with the net/http
library? When I use the Net::HTTP#request_get method, it simply hangs
and never gives me any data. I opened up a network monitoring program
and indeed the data is coming in, it's just the only way I can get the
data to stop streaming is to throw an exception, which makes the data
disappear. Does anyone know of a way to do this?
--
Posted via
http://www.ruby-...
.
2 Answers
_why
9/22/2008 7:01:00 PM
0
On Tue, Sep 23, 2008 at 03:24:49AM +0900, William Spitzer wrote:
> So I was wondering how one would capture a continuous stream of data
> (for instance a net radio station or a webcam) with the net/http
> library?
Here's an example of streaming the Ubuntu ISO with Net::HTTP:
require 'net/http'
uri = URI("
http://mirrors.us.kernel.org/ubuntu-releases/hardy/ubuntu-8.04.1-desktop-i386...
)
Net::HTTP.get_response(uri) do |res|
size, total = 0, res.header['Content-Length'].to_i
res.read_body do |chunk|
size += chunk.size
puts "%d%% done (%d of %d)" % [(size * 100) / total, size, total]
end
end
So, before the `read_body` block, you can examine the headers. And
inside the `read_body` block, you can handle chunks as they come in.
In your case, you'd pass them to file.write.
_why
FrihD
9/22/2008 9:51:00 PM
0
_why wrote:
> On Tue, Sep 23, 2008 at 03:24:49AM +0900, William Spitzer wrote:
>> So I was wondering how one would capture a continuous stream of data
>> (for instance a net radio station or a webcam) with the net/http
>> library?
>
> Here's an example of streaming the Ubuntu ISO with Net::HTTP:
>
> require 'net/http'
> uri = URI("
http://mirrors.us.kernel.org/ubuntu-releases/hardy/ubuntu-8.04.1-desktop-i386...
)
> Net::HTTP.get_response(uri) do |res|
> size, total = 0, res.header['Content-Length'].to_i
> res.read_body do |chunk|
> size += chunk.size
> puts "%d%% done (%d of %d)" % [(size * 100) / total, size, total]
> end
> end
>
> So, before the `read_body` block, you can examine the headers. And
> inside the `read_body` block, you can handle chunks as they come in.
> In your case, you'd pass them to file.write.
>
> _why
>
And don't forgot to put a "stop" condition to the loop in case of a
"everlasting download". The problem is : I don't know how he can cleanly
break the chunk iterations (will the socket be cleanly disconnected with
an exception etc.?).
By the way, this kind of "streaming" is named "progressive download" and
both have their drawbacks.
regards
--FrihD(Lucas)
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Streaming media with net/http
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password