Avatar billede montago Praktikant
23. august 2006 - 15:50 Der er 2 løsninger

ADO: åbn binær fil, uden at læse ind i ram

Jeg har fundet et streaming script, som jeg bruger til at streame mp3'er

pt. bruges scriptet kun af mig selv, samt nogle få udvalgte - ide der er væsentlige sikkerhedsfejl som skal rettes...

hvad jeg gerne vil have hjælp til er følgende:

1. (50 point)
I stedet for at brue "LoadFromFile" til at lægge hele filen ind i mine RAM, skal ADO bruge en "pointer" til filen, hvorefter kun den del som skal streames, bliver læst fra filen. - Jeg kan ikke få "ADO.open("fil.mp3",1,1)" til at virke hvilket burde være svaret ?

2. (100 point)
Windows Media Player (WMP) henter hele filen, istedet for kun at hente segmenter ad gangen - hvordan tvinger jeg scriptet til kun at udskrive 10-30 kbit pr sekund - afhængig af bit-hastigheden ? til denne løsning har jeg selv et script som kan finde bit-hastigheden - eventuelt ville 25-30 kbs være nok til de allerfleste mp3'er

3. (50 point)
Min Script-timeout er sat til 999 sekunder ~ 16 minutter. hvordan undgår jeg at scriptet 'timer out' på lange mp3'er ??


-------------------------
    Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Open
    objStream.Type = 1
    objStream.LoadFromFile Request.querystring("Listen")
   
    lSize = objStream.size
   
    Response.AddHeader "Content-Disposition", "inline; filename=" & Request.querystring("sFile")
    Response.AddHeader "Content-Length", lSize
   
   
   
    CHUNK=2048
    NumberofBlocks=(lSize -(lsize mod chunk))/chunk
   
    For lBlocks = 1 To NumberofBlocks
    If Response.IsClientConnected = False Then Exit For
        Response.BinaryWrite objStream.Read(CHUNK)
        Response.Flush
    Next
    if NumberofBlocks*CHUNK < lSize then
        Response.BinaryWrite objStream.Read(lSize - (NumberofBlocks*CHUNK))
        Response.Flush
    end if
-------------------------
Avatar billede montago Praktikant
25. august 2006 - 13:55 #1
2. bobbedude gav svaret - ASP kræver en DLL til sleep
http://www.aspalliance.com/stevesmith/articles/sleeptimer.asp

ved at sleep'e efter Response.flush i 1000ms vil scriptet kun sende X chunks pr sekund - har derfor ændret scriptet til:

'Sleep
    Set objTimer = Server.CreateObject("Timer.Sleep")
'ADO
    Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Open
    objStream.Type = 1
    objStream.LoadFromFile "d:\mp3'er\" & Request.querystring("Listen")
   
    lSize = objStream.size
   
    Response.AddHeader "Content-Disposition", "inline; filename=" & Request.querystring("sFile")
    Response.AddHeader "Content-Length", lSize
   
    speed = 25
    chunksize = speed * 1024 'kb pr second
   
    NumberofBlocks = int(lSize / chunksize)
   
    For lBlocks = 1 To NumberofBlocks
        If Response.IsClientConnected = False Then Exit For
        Response.BinaryWrite objStream.Read(chunksize)
        Response.Flush
        objTimer.DoSleep(1000)
    Next
    if NumberofBlocks*chunksize < lSize then
        Response.BinaryWrite objStream.Read(lSize - (NumberofBlocks*chunksize))
        Response.Flush
    end if
Avatar billede montago Praktikant
16. april 2007 - 11:12 #2
#1

Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Open
    objStream.Type = 1
    objStream.Write file.read( chunck )


#3
  ingen løsning endnu...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester