"http" et la création d un lien streaming ....

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

"http" et la création d un lien streaming ....

Message par celtic88 »

Bonjour ,
j ai un petit problème avec "http" et la création d un lien streaming et qui accepte le découpage "Accept-Ranges:bytes" sur mon pc, afin de l'ouvrir avec "vlc".

voilla j'ai fait quelques essais mai rien de bon,la music démarre au bout de 5 sec et elle se bloque!!

merci.

Code : Tout sélectionner

EnableExplicit

Macro ReceiveNetworkData(sock,Buffer,sizebuffer)
  recv_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro SendNetworkData(sock,Buffer,sizebuffer)
  send_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro aReq(rang,rang2,lenData)
  Ascii("HTTP/1.1 206 OK"  + #CRLF$ +
        "Server: Test"   + #CRLF$ +
        "Connection: Keep-Alive" + #CRLF$ +
        "Accept-Ranges:bytes" + #CRLF$ +
        "Content-Range:bytes " + Str(rang) + "-" + Str(lenData-1) +"/" + Str(lenData) + #CRLF$ +
        "Content-Lenght: " + Str(lenData-rang) + #CRLF$ +
        "Content-Type: application/octet-stream" + #CRLF$ + #CRLF$ )
EndMacro

Structure Http_sendFile
  ClientID.i
  ClientSysID.i
  OpenFileId.i
  SizeOffile.q
  Seekpos.q
  *WorkMem
  ConnectionIsClosed.b
EndStructure

Structure listClient
  *iHttp_sendFile.Http_sendFile
EndStructure

Global NewList listClient.listClient()
Global HttServerPort.w = 6832

Procedure Http_sendFile(*iHttp_sendFile.Http_sendFile)
  With *iHttp_sendFile
    Debug "Star snd"
    Protected CourPos.q=\Seekpos,SendSize.l,ReadSize.l
    Repeat
      
      ReadSize = ReadData(\OpenFileId,\WorkMem,1024*10)
      
      Repeat
        If \ConnectionIsClosed = 1
          Debug "disc"
          Break 2
        EndIf
        
        SendSize=SendNetworkData(\ClientSysID,\WorkMem,ReadSize)
        If SendSize > 0
          If SendSize <> ReadSize
            Debug "!!!!!!!!!!!"
            
          EndIf
          Break
        EndIf
      ForEver
      
      CourPos +ReadSize
      
    Until CourPos = \Sizeoffile
    
    Protected *SendReqEnd = Ascii(#CRLF$ + #CRLF$)
    If *SendReqEnd
      If \ConnectionIsClosed = 0
        If SendNetworkData(\ClientSysID,*SendReqEnd,4) < 4
          Debug "Error Send SendReqEnd"
        EndIf
      EndIf
      FreeMemory(*SendReqEnd)
    EndIf
    
    FreeMemory(\WorkMem)
    
    \ConnectionIsClosed = 2
    Debug "End Send File"
  EndWith
EndProcedure


Procedure Http_StartsendFile(*iHttp_sendFile.Http_sendFile,File.s)
  With *iHttp_sendFile
    \WorkMem = AllocateMemory(1024*10)
    If Not \WorkMem
      ProcedureReturn 0
    EndIf
    ReceiveNetworkData(\ClientSysID, \WorkMem, 1024*10)
    Protected GetReq.s = PeekS(\WorkMem, -1, #PB_UTF8)
    If GetReq = #Null$
      ProcedureReturn 0
    EndIf
    FillMemory(\WorkMem,1024*10)
    MessageRequester("Get Request",GetReq)
    
    Protected GetRange.s = Mid(GetReq,FindString(GetReq,"Range: bytes=")+Len("Range: bytes="))
    GetRange = Mid(GetRange,0,FindString(GetRange,"-")-1)
    Protected Range.q = Val(GetRange) 
    \Seekpos = Range
    Debug "Range = " +GetRange
    
    \SizeOffile = FileSize(File) 
    If \Sizeoffile < 1
      Debug "File not Exist"
      ProcedureReturn 0
    EndIf
    
    \OpenFileId= ReadFile(#PB_Any,File)
    If \OpenFileId =0
      ProcedureReturn 0
    EndIf
    FileSeek( \OpenFileId,\Seekpos)
    
    Debug "Size Of File = " + Str(\Sizeoffile)
    
    Protected *SendReq = aReq(Range,0,\SizeOffile)
    If *SendReq
      Protected reqz.l=MemorySize(*SendReq)
      If SendNetworkData(\ClientSysID,*SendReq,reqz) <> reqz
        FreeMemory(*SendReq)
        ProcedureReturn 0
      EndIf
      FreeMemory(*SendReq)
    Else
      ProcedureReturn 0
    EndIf
    
    If CreateThread(@Http_sendFile(),*iHttp_sendFile)
      ProcedureReturn 1
    Else
      ProcedureReturn 0
    EndIf
  EndWith
EndProcedure

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf


If CreateNetworkServer(0, HttServerPort)
  
  Global SelecFile.s = OpenFileRequester("Select a file...","","music|*.mp3|Video|*.avi;*.asf",0)
  If SelecFile = #Null$
    End
    ;     SelecFile="test.mp3"
  EndIf
  
  MessageRequester("Hi " + UserName(),"Your Streaming Link : "+ #CRLF$ +  #CRLF$ + 
                                      "http://127.0.0.1: " + Str(HttServerPort)+ "/Noting" + #CRLF$ + 
                                      "Or " + #CRLF$ + 
                                      "http://Your external Ip: " + Str(HttServerPort)+ "/Noting" + #CRLF$ + 
                                      "Click Ok To Start" )
  
  Define SEvent,ClientID,*iHttp_sendFile.Http_sendFile
  
  Repeat
    Delay(10)
    
    ForEach listClient()
      If listClient()\iHttp_sendFile\ConnectionIsClosed = 2
        FreeMemory(listClient()\iHttp_sendFile)
        DeleteElement(listClient())
      EndIf
    Next
    
    SEvent = NetworkServerEvent()
    
    If SEvent
      
      ClientID = EventClient()
      
      Select SEvent
          
        Case #PB_NetworkEvent_Connect
          
        Case #PB_NetworkEvent_Data
          *iHttp_sendFile = AllocateMemory(SizeOf(Http_sendFile))
          If *iHttp_sendFile
            With *iHttp_sendFile
              \ClientSysID = ConnectionID(ClientID)
              \ClientID = ClientID
              If Http_StartsendFile(*iHttp_sendFile,SelecFile) =1
                AddElement(listClient())
                listClient()\iHttp_sendFile=*iHttp_sendFile
              Else
                If \WorkMem
                  FreeMemory(\WorkMem)
                EndIf
                CloseNetworkConnection(ClientID)
              EndIf
            EndWith
          Else
            CloseNetworkConnection(ClientID)
          EndIf
          
        Case #PB_NetworkEvent_Disconnect
          ForEach listClient()
            If ClientID = listClient()\iHttp_sendFile\ClientID
              listClient()\iHttp_sendFile\ConnectionIsClosed=1
              Break
            EndIf
          Next
          
      EndSelect
    EndIf
    
  ForEver
  
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: "http" et la création d un lien streaming ....

Message par celtic88 »

:D problème résolu

mai pas complètement rest des truc a savoir :) ; 8O http://julien-pauli.developpez.com/tuto ... age=page_6

a suivre...

Code : Tout sélectionner

EnableExplicit

Macro ReceiveNetworkData(sock,Buffer,sizebuffer)
  recv_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro SendNetworkData(sock,Buffer,sizebuffer)
  send_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro aReq(rang,rang2,lenData,ContentType)
  Ascii("HTTP/1.1 206 OK"  + #CRLF$ +
        "Server: Test"   + #CRLF$ +
        "Connection: close" + #CRLF$ +
        "Accept-Ranges:bytes" + #CRLF$ +
        "Content-Range:bytes " + Str(rang) + "-" + Str(lenData-1) +"/" + Str(lenData) + #CRLF$ +
        "Content-Lenght: " + Str(lenData-rang) + #CRLF$ +
        "Content-Type: " + ContentType + #CRLF$ + #CRLF$ )
EndMacro

Structure Http_sendFile
  ClientID.i
  ClientSysID.i
  OpenFileId.i
  SizeOffile.q
  Seekpos.q
  *WorkMem
  ConnectionIsClosed.b
  CloseConnection.b
EndStructure

Structure listClient
  *iHttp_sendFile.Http_sendFile
EndStructure

Global NewList listClient.listClient()
Global HttServerPort.w = 6832

Procedure Http_sendFile(*iHttp_sendFile.Http_sendFile)
  With *iHttp_sendFile
    Protected CourPos.q=\Seekpos,SendSize.l,ReadSize.l
    Debug "Client: --------------------------" + "Start Send With ClientID :" + Str(\ClientID) + " Start Pos :" + Str(CourPos) + " Total size :" + Str(\SizeOffile) + "--------------------------"
    
    Repeat
      
      ReadSize = ReadData(\OpenFileId,\WorkMem,1024*10)
      
      Repeat
         ;Delay(300)
        
        If \ConnectionIsClosed = 1
          Debug "Client : --------------------------" +  "Was Disconnected ClientID :" + Str(\ClientID) + "--------------------------"
          Break 2
        EndIf
        
        SendSize=SendNetworkData(\ClientSysID,\WorkMem,ReadSize)
        If SendSize > 0
          If SendSize <> ReadSize
            Debug "Error: --------------------------" + "Size Of read is different to size of send !" + "--------------------------"
          EndIf
          Break
          
        EndIf
        
      ForEver
      
      CourPos +ReadSize
      
    Until CourPos = \Sizeoffile
    
    Protected *SendReqEnd = Ascii(#CRLF$ + #CRLF$)
    If *SendReqEnd
      If \ConnectionIsClosed = 0
        If SendNetworkData(\ClientSysID,*SendReqEnd,4) < 4
          Debug "Error: --------------------------" + "Send End of FileSend !" + "--------------------------"
        EndIf
      EndIf
      FreeMemory(*SendReqEnd)
    EndIf
    
    FreeMemory(\WorkMem)
    
    Debug "Client: --------------------------" + "End Send With ClientID :" + Str(\ClientID) + " Total size send " + Str(CourPos) + "--------------------------"
    If CourPos = \Sizeoffile
      \CloseConnection = 1
    Else
      \ConnectionIsClosed = 2
    EndIf
  EndWith
EndProcedure


Procedure Http_StartsendFile(*iHttp_sendFile.Http_sendFile,File.s)
  With *iHttp_sendFile
    \WorkMem = AllocateMemory(1024*10)
    If Not \WorkMem
      ProcedureReturn -1
    EndIf
    ReceiveNetworkData(\ClientSysID, \WorkMem, 1024*10)
    Protected GetReq.s = PeekS(\WorkMem, -1, #PB_UTF8)
    If GetReq = #Null$
      ProcedureReturn -2
    EndIf
    FillMemory(\WorkMem,1024*10)
;     MessageRequester("",GetReq)
    Debug "Get Request: --------------------------" + #CRLF$ + GetReq + #CRLF$ + "End Request: --------------------------"
    
    Protected Range.q=0
    Protected frng.l = FindString(GetReq,"Range: bytes=")
    If frng
      Protected GetRange.s = Mid(GetReq,frng+Len("Range: bytes="))
      GetRange = Mid(GetRange,0,FindString(GetRange,"-")-1)
      Range = Val(GetRange) 
    EndIf
    \Seekpos = Range
    Debug "Get Range: --------------------------" + Str(Range) + "--------------------------"
    
    \OpenFileId= ReadFile(#PB_Any,File,#PB_File_SharedRead)
    If \OpenFileId =0
      Debug "Error: --------------------------" + "File does not exist ?" + "--------------------------"
      ProcedureReturn -3
    EndIf
    FileSeek( \OpenFileId,\Seekpos)
    
    \SizeOffile = Lof(\OpenFileId)
    
    Debug "File Size: --------------------------" + Str(\Sizeoffile) +  "--------------------------"
    
    Protected ContentType.s
    Protected Exe.s = UCase(GetExtensionPart(File))
    Select Exe
      Case "AVI"
        ContentType = "video/x-msvideo"
      Case "MP3"
        ContentType = "audio/mpeg"
      Default 
        ContentType = "application/octet-stream"
    EndSelect
    
    Protected *SendReq = aReq(Range,0,\SizeOffile,ContentType)
    If *SendReq
      Protected reqz.l=MemorySize(*SendReq)
      If SendNetworkData(\ClientSysID,*SendReq,reqz) <> reqz
        FreeMemory(*SendReq)
        ProcedureReturn -4
      EndIf
      FreeMemory(*SendReq)
    Else
      ProcedureReturn -5
    EndIf
    
    If CreateThread(@Http_sendFile(),*iHttp_sendFile)
      ProcedureReturn 1
    Else
      ProcedureReturn -6
    EndIf
  EndWith
EndProcedure

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf


If CreateNetworkServer(0, HttServerPort)
  
  Global SelecFile.s = OpenFileRequester("Select a file...","","music|*.mp3|Video|*.avi",0)
  If SelecFile = #Null$
    End
    ;     SelecFile="test.mp3"
  EndIf
  
  MessageRequester("Hi " + UserName(),"Your Streaming Link : "+ #CRLF$ +  #CRLF$ + 
                                      "http://127.0.0.1: " + Str(HttServerPort)+ "/Noting" + #CRLF$ + 
                                      "Or " + #CRLF$ + 
                                      "http://Your external Ip: " + Str(HttServerPort)+ "/Noting" + #CRLF$ + 
                                      "Click Ok To Start" )
  
  Define SEvent,ClientID,*iHttp_sendFile.Http_sendFile
  
  Repeat
    Delay(10)
    
    ForEach listClient()
      If listClient()\iHttp_sendFile\CloseConnection = 1 And listClient()\iHttp_sendFile\ConnectionIsClosed <> 1
        CloseNetworkConnection(listClient()\iHttp_sendFile\ClientID)
        listClient()\iHttp_sendFile\ConnectionIsClosed = 2
      EndIf
      If listClient()\iHttp_sendFile\ConnectionIsClosed = 2
        CloseFile(listClient()\iHttp_sendFile\OpenFileId)
        FreeMemory(listClient()\iHttp_sendFile)
        DeleteElement(listClient())
      EndIf
    Next
    
    SEvent = NetworkServerEvent()
    
    If SEvent
      
      ClientID = EventClient()
      
      Select SEvent
          
        Case #PB_NetworkEvent_Connect
          Debug "Client: --------------------------" + "Was connected ClientID :" + Str(ClientID) +  "--------------------------"
          
        Case #PB_NetworkEvent_Data
          Debug "Client: --------------------------" + "Start Receive data From ClientID :" + Str(ClientID) +  "--------------------------"
          *iHttp_sendFile = AllocateMemory(SizeOf(Http_sendFile))
          If *iHttp_sendFile
            With *iHttp_sendFile
              \ClientSysID = ConnectionID(ClientID)
              \ClientID = ClientID
              If Http_StartsendFile(*iHttp_sendFile,SelecFile) =1
                AddElement(listClient())
                listClient()\iHttp_sendFile=*iHttp_sendFile
              Else
                If \OpenFileId
                  CloseFile(\OpenFileId)
                EndIf
                If \WorkMem
                  FreeMemory(\WorkMem)
                EndIf
                CloseNetworkConnection(ClientID)
              EndIf
            EndWith
          Else
            CloseNetworkConnection(ClientID)
          EndIf
          
        Case #PB_NetworkEvent_Disconnect
          ForEach listClient()
            If ClientID = listClient()\iHttp_sendFile\ClientID
              listClient()\iHttp_sendFile\ConnectionIsClosed=1
              Break
            EndIf
          Next
          
      EndSelect
    EndIf
    
  ForEver
  
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf




.....i Love Pb :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: "http" et la création d un lien streaming ....

Message par falsam »

Alors là bravo.

Par contre l'écoute n'est pas en temps réel. La lecture commence au début du titre et non pas à un instant T.

Plusieurs clients ne peuvent pas entendre la même chose au même moment.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: "http" et la création d un lien streaming ....

Message par celtic88 »

salut @falsam

tu veux l'utiliser comme un radio?
.....i Love Pb :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: "http" et la création d un lien streaming ....

Message par falsam »

celtic88 a écrit :tu veux l'utiliser comme un radio?
Avoir un code qui permet de faire du streaming radio ça serait top :wink:

L'idéal serait de lire une liste de diffusion contenant des mp3 ou autres et de pouvoir ajouter en fin de liste d'autres titres pendant qu'une lecture est en cours.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: "http" et la création d un lien streaming ....

Message par falsam »

Par contre je garde précieusement ton code actuel pour des opérations de replay. Ca c'est génial.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: "http" et la création d un lien streaming ....

Message par celtic88 »

mise a jour 3

:mrgreen:

Code : Tout sélectionner

EnableExplicit

Macro ReceiveNetworkData(sock,Buffer,sizebuffer)
  recv_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro SendNetworkData(sock,Buffer,sizebuffer)
  send_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro bReqSendFile(Code, rang,rang2,lenData,ContentType,ETag)
  ("HTTP/1.1 " +  Code+ #CRLF$ +
   "Server: Celtic88"   + #CRLF$ +
   "Connection: close" + #CRLF$ +
      "ETag: "+Chr(34)+ETag+Chr(34)+ #CRLF$ +
  "Accept-Ranges: bytes" + #CRLF$ +
                           "Content-Range: bytes " + Str(rang) + "-" + Str(rang2-1) +"/" + Str(lenData) + #CRLF$ +
                           "Content-Length: " + Str(lenData-rang) + #CRLF$ +
                           "Content-Type: " + ContentType + #CRLF$ +
                           #CRLF$ )
EndMacro

Global Http_404 = UTF8("HTTP/1.1 404 Not Found"+#CRLF$ +"Content-Length: 0"+#CRLF$ +"Connection: close" + #CRLF$ + #CRLF$)

Structure Http_sendFile
  ClientID.i
  ClientSysID.i
  OpenFileId.i
  SizeOffile.q
  SizeToSend.q
  Seekpos.q
  *WorkMem
  WorkMemSize.l
  ConnectionIsClosed.b
  CloseConnection.b
EndStructure

Structure listClient
  *iHttp_sendFile.Http_sendFile
EndStructure

Global NewList listClient.listClient()
Global HttServerPort.w = 6832

Procedure Http_sendFile(*iHttp_sendFile.Http_sendFile)
  With *iHttp_sendFile
    Protected CourPos.q=\Seekpos,SendSize.l,ReadSize.l
    Debug "Client: --------------------------" + "Start Send With ClientID :" + Str(\ClientID) + " Start Pos :" + Str(CourPos) + " Total size :" + Str(\SizeOffile) + "--------------------------"
    
    Repeat
      
      If CourPos + \WorkMemSize > \SizeToSend
        \WorkMemSize = \SizeToSend-CourPos
      EndIf
      
      ReadSize = ReadData(\OpenFileId,\WorkMem,\WorkMemSize)
      If ReadSize =0
        \CloseConnection=1
        Break
      EndIf
      
      Repeat
;       Delay(50)
        
        If \ConnectionIsClosed = 1
          Debug "Client : --------------------------" +  "Was Disconnected ClientID :" + Str(\ClientID) + "--------------------------"
          Break 2
        EndIf
        
        SendSize=SendNetworkData(\ClientSysID,\WorkMem,ReadSize)
        If SendSize > 0
          Break
        Else
          Delay(5)
        EndIf
        
      ForEver
      
      CourPos +ReadSize
      
    Until CourPos = \SizeToSend
    
    FreeMemory(\WorkMem)
    
    ;     SendNetworkString(\ClientID,#CRLF$ +#CRLF$,#PB_Ascii) 
    
    Debug "Client: --------------------------" + "End Send With ClientID :" + Str(\ClientID) + " Total size send " + Str(CourPos) + "--------------------------"
    
    If CourPos = \SizeToSend
      \CloseConnection=1
    EndIf
    If  \ConnectionIsClosed = 1
      \ConnectionIsClosed = 2
    EndIf
  EndWith
EndProcedure

Procedure Http_StartsendFile(*iHttp_sendFile.Http_sendFile,File.s)
  With *iHttp_sendFile
    \WorkMem = AllocateMemory(\WorkMemSize)
    If Not \WorkMem
      ProcedureReturn -1
    EndIf
    ReceiveNetworkData(\ClientSysID, \WorkMem, \WorkMemSize)
    Protected GetReq.s = PeekS(\WorkMem, -1, #PB_UTF8)
    If GetReq = #Null$
      ProcedureReturn -2
    EndIf
    FillMemory(\WorkMem,\WorkMemSize)
    Debug "Get Request: --------------------------" + #CRLF$ + GetReq + #CRLF$ + "End Request: --------------------------"
    
    Protected sMethod.s = Left(GetReq,FindString(GetReq, #CRLF$)-1)
    If StringField(sMethod,1," ") <> "GET" Or StringField(sMethod,2," ")  <> "/Noting"
      ProcedureReturn -3
    EndIf
    
    Protected frng.l ,GetRange1.q=0,GetRange2.q=0,GetRange3.q=0,iCode.s="200 OK"
    frng = FindString(GetReq,"Range: bytes=")
    If frng
      iCode="206 Partial Content"
      Protected GetRange.s = Mid(GetReq,frng+Len("Range: bytes="))
      GetRange = Mid(GetRange,0,FindString(GetRange,#CRLF$)-1)
      GetRange1 = Val(Mid(GetRange,0,FindString(GetRange,"-")-1))
      GetRange = Mid(GetRange,FindString(GetRange,"-")+1)
      frng =FindString(GetRange,"/")
      If FindString(GetRange,",")
        
      Else
        If frng
          GetRange2 = Val(Mid(GetRange,0,frng-1))
        Else
          GetRange2 = Val(Mid(GetRange,0))
        EndIf
      EndIf
      If frng
        GetRange3 = Val(Mid(GetRange,FindString(GetRange,"/")+1)) 
      EndIf
      
      Debug "Get Range: --------------------------" + Str(GetRange1) + "-" + Str(GetRange2) + "/" + Str(GetRange3) + "--------------------------"
    EndIf
    
    \SizeToSend= GetRange2
    \Seekpos = GetRange1
    
    \OpenFileId= ReadFile(#PB_Any,File,#PB_File_SharedRead)
    If \OpenFileId =0
      Debug "Error: --------------------------" + "File does not exist ?" + "--------------------------"
      ProcedureReturn -3
    EndIf
    \SizeOffile = Lof(\OpenFileId)
    
    If \SizeToSend
      \SizeToSend+1
    Else
      \SizeToSend=\SizeOffile
    EndIf
    
    If \Seekpos >= \SizeOffile
      SendNetworkData(\ClientSysID,Http_404,MemorySize(Http_404))
      ProcedureReturn -4
    EndIf
    
    If \Seekpos
      FileSeek( \OpenFileId,\Seekpos)
    EndIf
    
    Debug "File Size: --------------------------" + Str(\Sizeoffile) +  "--------------------------"
    
    Protected ContentType.s
    Protected Exe.s = UCase(GetExtensionPart(File))
    Select Exe
      Case "AVI"
        ContentType = "video/x-msvideo"
      Case "MP3"
        ContentType = "audio/mpeg"
      Default 
        ContentType = "application/octet-stream"
    EndSelect
    
    Protected SendReq.s = bReqSendFile(iCode,GetRange1,\SizeToSend,\SizeOffile,ContentType,1234)
    If SendNetworkString(\ClientID,SendReq,#PB_Ascii)  >0
    Else
      ProcedureReturn -5
    EndIf
    
    If CreateThread(@Http_sendFile(),*iHttp_sendFile)
      ProcedureReturn 1
    Else
      ProcedureReturn -6
    EndIf
  EndWith
EndProcedure

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf


If CreateNetworkServer(0, HttServerPort)
  
  Global SelecFile.s = OpenFileRequester("Select a file...","","music|*.mp3|Video|*.avi",0)
  If SelecFile = #Null$
    End
    ;     SelecFile="test.mp3"
  EndIf
  
  MessageRequester("Hi " + UserName(),"Your Streaming Link : "+ #CRLF$ +  #CRLF$ + 
                                      "http://127.0.0.1:" + Str(HttServerPort)+ "/Noting" + #CRLF$ + 
                                      "Or " + #CRLF$ + 
                                      "http://Your external Ip: " + Str(HttServerPort)+ "/Noting" + #CRLF$ + 
                                      "Click Ok To Start" )
  
  Define SEvent,ClientID,*iHttp_sendFile.Http_sendFile
  
  Repeat
    Delay(10)
    
    ForEach listClient()
      If listClient()\iHttp_sendFile\CloseConnection = 1 And listClient()\iHttp_sendFile\ConnectionIsClosed <> 1
        CloseNetworkConnection(listClient()\iHttp_sendFile\ClientID)
        listClient()\iHttp_sendFile\ConnectionIsClosed = 2
      EndIf
      If listClient()\iHttp_sendFile\ConnectionIsClosed = 2
        CloseFile(listClient()\iHttp_sendFile\OpenFileId)
        FreeMemory(listClient()\iHttp_sendFile)
        DeleteElement(listClient())
      EndIf
    Next
    
    SEvent = NetworkServerEvent()
    
    If SEvent
      
      ClientID = EventClient()
      
      Select SEvent
          
        Case #PB_NetworkEvent_Connect
          Debug "Client: --------------------------" + "Was connected ClientID :" + Str(ClientID) +  "--------------------------"
          
        Case #PB_NetworkEvent_Data
          Debug "Client: --------------------------" + "Start Receive data From ClientID :" + Str(ClientID) +  "--------------------------"
          *iHttp_sendFile = AllocateMemory(SizeOf(Http_sendFile))
          If *iHttp_sendFile
            With *iHttp_sendFile
              \ClientSysID = ConnectionID(ClientID)
              \ClientID = ClientID
              \WorkMemSize = 1024*10
              If Http_StartsendFile(*iHttp_sendFile,SelecFile) =1
                AddElement(listClient())
                listClient()\iHttp_sendFile=*iHttp_sendFile
              Else
                If \OpenFileId
                  CloseFile(\OpenFileId)
                EndIf
                If \WorkMem
                  FreeMemory(\WorkMem)
                EndIf
                CloseNetworkConnection(ClientID)
              EndIf
            EndWith
          Else
            CloseNetworkConnection(ClientID)
          EndIf
          
        Case #PB_NetworkEvent_Disconnect
          ForEach listClient()
            If ClientID = listClient()\iHttp_sendFile\ClientID
              listClient()\iHttp_sendFile\ConnectionIsClosed=1
              listClient()\iHttp_sendFile\ClientID=0
              listClient()\iHttp_sendFile\ClientSysID=0
              Break
            EndIf
          Next
          
      EndSelect
    EndIf
    
  ForEver
  
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
Dernière modification par celtic88 le jeu. 13/avr./2017 22:37, modifié 1 fois.
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: "http" et la création d un lien streaming ....

Message par celtic88 »

Re-up :mrgreen:
.....i Love Pb :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: "http" et la création d un lien streaming ....

Message par falsam »

Merci pour cette mise à jour. :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: "http" et la création d un lien streaming ....

Message par celtic88 »

Mise a jour v3
@Falsam Pas de quoi :)
as tu essayé le code et tu pense quoi ?
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: "http" et la création d un lien streaming ....

Message par celtic88 »

Il me plait :mrgreen:
Re Mise a jour v4
partager plusieurs fichiers avec ; android ou playstation ....

Code : Tout sélectionner

EnableExplicit

Macro ReceiveNetworkData(sock,Buffer,sizebuffer)
  recv_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro SendNetworkData(sock,Buffer,sizebuffer)
  send_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro bReqSendFile(Code, rang,rang2,lenData,ContentType,ETag)
  ("HTTP/1.1 " +  Code+ #CRLF$ +
   "Server: Celtic88"   + #CRLF$ +
   "Connection: close" + #CRLF$ +
   "ETag: "+Chr(34)+ETag+Chr(34)+ #CRLF$ +
   "Accept-Ranges: bytes" + #CRLF$ +
   "Content-Range: bytes " + Str(rang) + "-" + Str(rang2-1) +"/" + Str(lenData) + #CRLF$ +
   "Content-Length: " + Str(lenData-rang) + #CRLF$ +
   "Content-Type: " + ContentType + #CRLF$ +
   #CRLF$ )
EndMacro

Global Http_404.s = ("HTTP/1.1 404 Not Found"+#CRLF$ +"Content-Length: 0"+#CRLF$ +"Connection: close" + #CRLF$ + #CRLF$)

Structure Http_sendFile
  ClientID.i
  ClientSysID.i
  OpenFileId.i
  SizeOffile.q
  SizeToSend.q
  Seekpos.q
  *WorkMem
  WorkMemSize.l
  ConnectionIsClosed.b
  CloseConnection.b
EndStructure

Structure listClient
  *iHttp_sendFile.Http_sendFile
EndStructure

Structure listSharedFile
  FilePath.s
  UniQId.s
EndStructure

Global NewList listClient.listClient()
Global NewList listSharedFile.listSharedFile()

Global HttServerPort.w = 6832

Procedure.s PlayListAdd(FilePath.s)
  Protected UniQId.s = Str(Random(9999999,999)) + "/"
  ForEach listSharedFile()
    If listSharedFile()\UniQId = UniQId
      UniQId = Str(Random(9999999,999))
    EndIf
  Next
  AddElement(listSharedFile())
  listSharedFile()\FilePath = FilePath
  listSharedFile()\UniQId = "/"+UniQId+URLEncoder(GetFilePart(FilePath))
  ProcedureReturn listSharedFile()\UniQId
EndProcedure

Procedure.s PlayListFind(FileId.s)
  ForEach listSharedFile()
    If listSharedFile()\UniQId  = FileId
      ProcedureReturn listSharedFile()\FilePath
    EndIf
  Next
EndProcedure

Procedure Http_sendFile(*iHttp_sendFile.Http_sendFile)
  With *iHttp_sendFile
    Protected CourPos.q=\Seekpos,SendSize.l,ReadSize.l
    Debug "Client: --------------------------" + "Start Send With ClientID :" + Str(\ClientID) + " Start Pos :" + Str(CourPos) + " Total size :" + Str(\SizeOffile) + "--------------------------"
    
    Repeat
      
      If CourPos + \WorkMemSize > \SizeToSend
        \WorkMemSize = \SizeToSend-CourPos
      EndIf
      
      ReadSize = ReadData(\OpenFileId,\WorkMem,\WorkMemSize)
      If ReadSize =0
        \CloseConnection=1
        Break
      EndIf
      
      Repeat
;         Delay(100)
        
        If \ConnectionIsClosed = 1
          Debug "Client : --------------------------" +  "Was Disconnected ClientID :" + Str(\ClientID) + "--------------------------"
          Break 2
        EndIf
        
        SendSize=SendNetworkData(\ClientSysID,\WorkMem,ReadSize)
        If SendSize > 0
          Break
        Else
          Delay(5)
        EndIf
        
      ForEver
      
      CourPos +ReadSize
      
    Until CourPos = \SizeToSend
    
    FreeMemory(\WorkMem)
    
    ;     SendNetworkString(\ClientID,#CRLF$ +#CRLF$,#PB_Ascii) 
    
    Debug "Client: --------------------------" + "End Send With ClientID :" + Str(\ClientID) + " Total size send " + Str(CourPos) + "--------------------------"
    
    If CourPos = \SizeToSend
      \CloseConnection=1
    EndIf
    If  \ConnectionIsClosed = 1
      \ConnectionIsClosed = 2
    EndIf
  EndWith
EndProcedure

Procedure Http_StartsendFile(*iHttp_sendFile.Http_sendFile)
  With *iHttp_sendFile
    \WorkMem = AllocateMemory(\WorkMemSize)
    If Not \WorkMem
      ProcedureReturn -1
    EndIf
    ReceiveNetworkData(\ClientSysID, \WorkMem, \WorkMemSize)
    Protected GetReq.s = PeekS(\WorkMem, -1, #PB_UTF8)
    If GetReq = #Null$
      ProcedureReturn -2
    EndIf
    FillMemory(\WorkMem,\WorkMemSize)
    Debug "Get Request: --------------------------" + #CRLF$ + GetReq + #CRLF$ + "End Request: --------------------------"
    
    Protected sMethod.s = Left(GetReq,FindString(GetReq, #CRLF$)-1)
    If StringField(sMethod,1," ") <> "GET"
      ProcedureReturn -3
    EndIf
    
    Protected File.s = PlayListFind(StringField(sMethod,2," ") )
    If File = #Null$
      Debug "Error: -------------------------- 'Get file' unknown ! "+StringField(sMethod,2," ")+"--------------------------"
      ProcedureReturn -3
    EndIf
    
    Protected frng.l ,GetRange1.q=0,GetRange2.q=0,GetRange3.q=0,iCode.s="200 OK"
    frng = FindString(GetReq,"Range: bytes=")
    If frng
      iCode="206 Partial Content"
      Protected GetRange.s = Mid(GetReq,frng+Len("Range: bytes="))
      GetRange = Mid(GetRange,0,FindString(GetRange,#CRLF$)-1)
      GetRange1 = Val(Mid(GetRange,0,FindString(GetRange,"-")-1))
      GetRange = Mid(GetRange,FindString(GetRange,"-")+1)
      frng =FindString(GetRange,"/")
      If FindString(GetRange,",")
        
      Else
        If frng
          GetRange2 = Val(Mid(GetRange,0,frng-1))
        Else
          GetRange2 = Val(Mid(GetRange,0))
        EndIf
      EndIf
      If frng
        GetRange3 = Val(Mid(GetRange,FindString(GetRange,"/")+1)) 
      EndIf
      
      Debug "Get Range: --------------------------" + Str(GetRange1) + "-" + Str(GetRange2) + "/" + Str(GetRange3) + "--------------------------"
    EndIf
    
    \SizeToSend= GetRange2
    \Seekpos = GetRange1
    
    \OpenFileId= ReadFile(#PB_Any,File,#PB_File_SharedRead)
    If \OpenFileId =0
      Debug "Error: --------------------------" + "File does not exist ?" + "--------------------------"
      ProcedureReturn -3
    EndIf
    \SizeOffile = Lof(\OpenFileId)
    
    If \SizeToSend
      \SizeToSend+1
    Else
      \SizeToSend=\SizeOffile
    EndIf
    
    If \Seekpos >= \SizeOffile
      SendNetworkString(\ClientID,Http_404,#PB_Ascii)
      ProcedureReturn -4
    EndIf
    
    If \Seekpos
      FileSeek( \OpenFileId,\Seekpos)
    EndIf
    
    Debug "File Size: --------------------------" + Str(\Sizeoffile) +  "--------------------------"
    
    Protected ContentType.s
    Protected Exe.s = UCase(GetExtensionPart(File))
    Select Exe
      Case "AVI"
        ContentType = "video/x-msvideo"
      Case "MP3"
        ContentType = "audio/mpeg"
      Default 
        ContentType = "application/octet-stream"
    EndSelect
    
    Protected SendReq.s = bReqSendFile(iCode,GetRange1,\SizeToSend,\SizeOffile,ContentType,1234)
    If SendNetworkString(\ClientID,SendReq,#PB_Ascii)  >0
    Else
      ProcedureReturn -5
    EndIf
    
    If CreateThread(@Http_sendFile(),*iHttp_sendFile)
      ProcedureReturn 1
    Else
      ProcedureReturn -6
    EndIf
  EndWith
EndProcedure

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf


If CreateNetworkServer(0, HttServerPort)
  
  Global SelecFile.s = OpenFileRequester("Select a file...","","music|*.mp3|Video|*.avi",0, #PB_Requester_MultiSelection)
  If SelecFile = #Null$
    End
  EndIf
  
  While SelecFile
    Debug "http://127.0.0.1:" + Str(HttServerPort) + PlayListAdd(SelecFile)
    SelecFile = NextSelectedFileName()
  Wend
  
  Define SEvent,ClientID,*iHttp_sendFile.Http_sendFile
  
  Repeat
    Delay(10)
    
    ForEach listClient()
      If listClient()\iHttp_sendFile\CloseConnection = 1 And listClient()\iHttp_sendFile\ConnectionIsClosed =0
        CloseNetworkConnection(listClient()\iHttp_sendFile\ClientID)
        listClient()\iHttp_sendFile\ConnectionIsClosed = 2
      EndIf
      If listClient()\iHttp_sendFile\ConnectionIsClosed = 2
        CloseFile(listClient()\iHttp_sendFile\OpenFileId)
        FreeMemory(listClient()\iHttp_sendFile)
        DeleteElement(listClient())
      EndIf
    Next
    
    SEvent = NetworkServerEvent()
    
    If SEvent
      
      ClientID = EventClient()
      
      Select SEvent
          
        Case #PB_NetworkEvent_Connect
          Debug "Client: --------------------------" + "Was connected ClientID :" + Str(ClientID) +  "--------------------------"
          
        Case #PB_NetworkEvent_Data
          Debug "Client: --------------------------" + "Start Receive data From ClientID :" + Str(ClientID) +  "--------------------------"
          *iHttp_sendFile = AllocateMemory(SizeOf(Http_sendFile))
          If *iHttp_sendFile
            With *iHttp_sendFile
              \ClientSysID = ConnectionID(ClientID)
              \ClientID = ClientID
              \WorkMemSize = 1024*10
              If Http_StartsendFile(*iHttp_sendFile) =1
                AddElement(listClient())
                listClient()\iHttp_sendFile=*iHttp_sendFile
              Else
                If \OpenFileId
                  CloseFile(\OpenFileId)
                EndIf
                If \WorkMem
                  FreeMemory(\WorkMem)
                EndIf
                CloseNetworkConnection(ClientID)
              EndIf
            EndWith
          Else
            CloseNetworkConnection(ClientID)
          EndIf
          
        Case #PB_NetworkEvent_Disconnect
          ForEach listClient()
            If ClientID = listClient()\iHttp_sendFile\ClientID
              listClient()\iHttp_sendFile\ConnectionIsClosed=1
              listClient()\iHttp_sendFile\ClientID=0
              listClient()\iHttp_sendFile\ClientSysID=0
              Break
            EndIf
          Next
          
      EndSelect
    EndIf
    
  ForEver
  
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: "http" et la création d un lien streaming ....

Message par celtic88 »

pour partager n'importe type de fichier:

Code : Tout sélectionner

Global Dim mime_types.s(1119)

Procedure Restore_mime_types()
  Protected t.w
  Restore mime_types
  For t=0 To 1119
    Read.s mime_types(t)
  Next
EndProcedure
Restore_mime_types()

Procedure.s Find_mime_types(ExFile.s)
  Protected t.w
  For t=0 To 1119 Step 2
    If UCase(mime_types(t))  =  UCase(ExFile)
      ProcedureReturn mime_types(t+1)
    EndIf
  Next
  ProcedureReturn  "application/octet-stream"
EndProcedure

Debug Find_mime_types("html")

DataSection
  mime_types:
  Data.s "323", "text/h323", "3g2", "video/3gpp2", "3gp", "video/3gpp", "3gp2", "video/3gpp2", "3gpp", "video/3gpp", "7z", "application/x-7z-compressed", "aa", "audio/audible", "AAC", "audio/aac", "aaf", "application/octet-stream", "aax", "audio/vnd.audible.aax", "ac3", "audio/ac3", "aca", "application/octet-stream", "accda", "application/msaccess.addin", "accdb", "application/msaccess", "accdc", "application/msaccess.cab", "accde", "application/msaccess", "accdr", "application/msaccess.runtime", "accdt", "application/msaccess", "accdw", "application/msaccess.webapplication", "accft", "application/msaccess.ftemplate", "acx", "application/internet-property-stream", "AddIn", "text/xml", "ade", "application/msaccess", "adobebridge", "application/x-bridge-url", "adp", "application/msaccess", "ADT", "audio/vnd.dlna.adts", "ADTS", "audio/aac", "afm", "application/octet-stream", "ai", "application/postscript", "aif", "audio/x-aiff", "aifc", "audio/aiff", "aiff", "audio/aiff", "air", "application/vnd.adobe.air-application-installer-package+zip", "amc", "application/x-mpeg", "application", "application/x-ms-application", "art", "image/x-jg", "asa", "application/xml", "asax", "application/xml", "ascx", "application/xml", "asd", "application/octet-stream", "asf", "video/x-ms-asf", "ashx", "application/xml", "asi", "application/octet-stream", "asm", "text/plain", "asmx", "application/xml", "aspx", "application/xml", "asr", "video/x-ms-asf", "asx", "video/x-ms-asf", "atom", "application/atom+xml", "au", "audio/basic", "avi", "video/x-msvideo", "axs", "application/olescript", "bas", "text/plain", "bcpio", "application/x-bcpio", "bin", "application/octet-stream", "bmp", "image/bmp", "c", "text/plain", "cab", "application/octet-stream", "caf", "audio/x-caf", "calx", "application/vnd.ms-office.calx", "cat", "application/vnd.ms-pki.seccat", "cc", "text/plain", "cd", "text/plain", "cdda", "audio/aiff", "cdf", "application/x-cdf", "cer", "application/x-x509-ca-cert", "chm", "application/octet-stream", "class", "application/x-java-applet", "clp", "application/x-msclip", "cmx", "image/x-cmx", "cnf", "text/plain", "cod", "image/cis-cod", "config", "application/xml", "contact", "text/x-ms-contact", "coverage", "application/xml", "cpio", "application/x-cpio", "cpp", "text/plain", "crd", "application/x-mscardfile", "crl", "application/pkix-crl", "crt", "application/x-x509-ca-cert", "cs", "text/plain", "csdproj", "text/plain", "csh", "application/x-csh", "csproj", "text/plain", "css", "text/css", "csv", "text/csv", "cur", "application/octet-stream", "cxx", "text/plain", "dat", "application/octet-stream", "datasource", "application/xml", "dbproj", "text/plain", "dcr", "application/x-director", "def", "text/plain", "deploy", "application/octet-stream", "der", "application/x-x509-ca-cert", "dgml", "application/xml", "dib", "image/bmp", "dif", "video/x-dv", "dir", "application/x-director", "disco", "text/xml", "dll", "application/x-msdownload", "dll.config", "text/xml", "dlm", "text/dlm", "doc", "application/msword", "docm", "application/vnd.ms-word.document.macroEnabled.12", "docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "dot", "application/msword", "dotm", "application/vnd.ms-word.template.macroEnabled.12", "dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template", "dsp", "application/octet-stream", "dsw", "text/plain", "dtd", "text/xml", "dtsConfig", "text/xml", "dv", "video/x-dv", "dvi", "application/x-dvi", "dwf", "drawing/x-dwf", "dwp", "application/octet-stream", "dxr", "application/x-director", "eml", "message/rfc822", "emz", "application/octet-stream", "eot", "application/octet-stream", "eps", "application/postscript", "etl", "application/etl", "etx", "text/x-setext", "evy", "application/envoy", "exe", "application/octet-stream", "exe.config", "text/xml", "fdf", "application/vnd.fdf", "fif", "application/fractals", "filters", "Application/xml", "fla", "application/octet-stream", "flr", "x-world/x-vrml", "flv", "video/x-flv", "fsscript", "application/fsharp-script", "fsx", "application/fsharp-script", "generictest", "application/xml", "gif", "image/gif", "group", "text/x-ms-group", "gsm", "audio/x-gsm", "gtar", "application/x-gtar", "gz", "application/x-gzip", "h", "text/plain", "hdf", "application/x-hdf", "hdml", "text/x-hdml", "hhc", "application/x-oleobject", "hhk", "application/octet-stream", "hhp", "application/octet-stream", "hlp", "application/winhlp", "hpp", "text/plain", "hqx", "application/mac-binhex40", "hta", "application/hta", "htc", "text/x-component", "htm", "text/html", "html", "text/html", "htt", "text/webviewhtml", "hxa", "application/xml", "hxc", "application/xml", "hxd", "application/octet-stream", "hxe", "application/xml", "hxf", "application/xml", "hxh", "application/octet-stream", "hxi", "application/octet-stream", "hxk", "application/xml", "hxq", "application/octet-stream", "hxr", "application/octet-stream", "hxs", "application/octet-stream", "hxt", "text/html", "hxv", "application/xml", "hxw", "application/octet-stream", "hxx", "text/plain", "i", "text/plain", "ico", "image/x-icon", "ics", "application/octet-stream", "idl", "text/plain", "ief", "image/ief", "iii", "application/x-iphone", "inc", "text/plain", "inf", "application/octet-stream", "inl", "text/plain", "ins", "application/x-internet-signup", "ipa", "application/x-itunes-ipa", "ipg", "application/x-itunes-ipg", "ipproj", "text/plain", "ipsw", "application/x-itunes-ipsw", "iqy", "text/x-ms-iqy", "isp", "application/x-internet-signup", "ite", "application/x-itunes-ite", "itlp", "application/x-itunes-itlp", "itms", "application/x-itunes-itms", "itpc", "application/x-itunes-itpc", "IVF", "video/x-ivf", "jar", "application/java-archive", "java", "application/octet-stream", "jck", "application/liquidmotion", "jcz", "application/liquidmotion", "jfif", "image/pjpeg", "jnlp", "application/x-java-jnlp-file", "jpb", "application/octet-stream", "jpe", "image/jpeg", "jpeg", "image/jpeg", "jpg", "image/jpeg", "js", "application/x-javascript", "json", "application/json", "jsx", "text/jscript", "jsxbin", "text/plain", "latex", "application/x-latex", "library-ms", "application/windows-library+xml", "lit", "application/x-ms-reader", "loadtest", "application/xml", "lpk", "application/octet-stream", "lsf", "video/x-la-asf", "lst", "text/plain", "lsx", "video/x-la-asf", "lzh", "application/octet-stream", "m13", "application/x-msmediaview", "m14", "application/x-msmediaview", "m1v", "video/mpeg", "m2t", "video/vnd.dlna.mpeg-tts", "m2ts", "video/vnd.dlna.mpeg-tts", "m2v", "video/mpeg", "m3u", "audio/x-mpegurl", "m3u8", "audio/x-mpegurl", "m4a", "audio/m4a", "m4b", "audio/m4b", "m4p", "audio/m4p", "m4r", "audio/x-m4r", "m4v", "video/x-m4v", "mac", "image/x-macpaint", "mak", "text/plain", "man", "application/x-troff-man", "manifest", "application/x-ms-manifest", "map", "text/plain", "master", "application/xml", "mda", "application/msaccess", "mdb", "application/x-msaccess", "mde", "application/msaccess", "mdp", "application/octet-stream", "me", "application/x-troff-me", "mfp", "application/x-shockwave-flash", "mht", "message/rfc822", "mhtml", "message/rfc822", "mid", "audio/mid", "midi", "audio/mid", "mix", "application/octet-stream", "mk", "text/plain", "mmf", "application/x-smaf", "mno", "text/xml", "mny", "application/x-msmoney", "mod", "video/mpeg", "mov", "video/quicktime", "movie", "video/x-sgi-movie", "mp2", "video/mpeg", "mp2v", "video/mpeg", "mp3", "audio/mpeg", "mp4", "video/mp4", "mp4v", "video/mp4", "mpa", "video/mpeg", "mpe", "video/mpeg", "mpeg", "video/mpeg", "mpf", "application/vnd.ms-mediapackage", "mpg", "video/mpeg", "mpp", "application/vnd.ms-project", "mpv2", "video/mpeg", "mqv", "video/quicktime", "ms", "application/x-troff-ms", "msi", "application/octet-stream", "mso", "application/octet-stream", "mts", "video/vnd.dlna.mpeg-tts", "mtx", "application/xml", "mvb", "application/x-msmediaview", "mvc", "application/x-miva-compiled", "mxp", "application/x-mmxp", "nc", "application/x-netcdf", "nsc", "video/x-ms-asf", "nws", "message/rfc822", "ocx", "application/octet-stream", "oda", "application/oda", "odc", "text/x-ms-odc", "odh", "text/plain", "odl", "text/plain", "odp", "application/vnd.oasis.opendocument.presentation", "ods", "application/oleobject", "odt", "application/vnd.oasis.opendocument.text", "one", "application/onenote", "onea", "application/onenote", "onepkg", "application/onenote", "onetmp", "application/onenote", "onetoc", "application/onenote", "onetoc2", "application/onenote", "orderedtest", "application/xml", "osdx", "application/opensearchdescription+xml", "p10", "application/pkcs10", "p12", "application/x-pkcs12", "p7b", "application/x-pkcs7-certificates", "p7c", "application/pkcs7-mime", "p7m", "application/pkcs7-mime", "p7r", "application/x-pkcs7-certreqresp", "p7s", "application/pkcs7-signature", "pbm", "image/x-portable-bitmap", "pcast", "application/x-podcast", "pct", "image/pict", "pcx", "application/octet-stream", "pcz", "application/octet-stream", "pdf", "application/pdf", "pfb", "application/octet-stream", "pfm", "application/octet-stream", "pfx", "application/x-pkcs12", "pgm", "image/x-portable-graymap", "pic", "image/pict", "pict", "image/pict", "pkgdef", "text/plain", "pkgundef", "text/plain", "pko", "application/vnd.ms-pki.pko", "pls", "audio/scpls", "pma", "application/x-perfmon", "pmc", "application/x-perfmon", "pml", "application/x-perfmon", "pmr", "application/x-perfmon", "pmw", "application/x-perfmon", "png", "image/png", "pnm", "image/x-portable-anymap", "pnt", "image/x-macpaint", "pntg", "image/x-macpaint", "pnz", "image/png", "pot", "application/vnd.ms-powerpoint", "potm", "application/vnd.ms-powerpoint.template.macroEnabled.12", "potx", "application/vnd.openxmlformats-officedocument.presentationml.template", "ppa", "application/vnd.ms-powerpoint", "ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12", "ppm", "image/x-portable-pixmap", "pps", "application/vnd.ms-powerpoint", "ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", "ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow", "ppt", "application/vnd.ms-powerpoint", "pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12", "pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "prf", "application/pics-rules", "prm", "application/octet-stream", "prx", "application/octet-stream", "ps", "application/postscript", "psc1", "application/PowerShell", "psd", "application/octet-stream", "psess", "application/xml", "psm", "application/octet-stream", "psp", "application/octet-stream", "pub", "application/x-mspublisher", "pwz", "application/vnd.ms-powerpoint", "qht", "text/x-html-insertion", "qhtm", "text/x-html-insertion", "qt", "video/quicktime", "qti", "image/x-quicktime", "qtif", "image/x-quicktime", "qtl", "application/x-quicktimeplayer", "qxd", "application/octet-stream", "ra", "audio/x-pn-realaudio", "ram", "audio/x-pn-realaudio", "rar", "application/octet-stream", "ras", "image/x-cmu-raster", "rat", "application/rat-file", "rc", "text/plain", "rc2", "text/plain", "rct", "text/plain", "rdlc", "application/xml", "resx", "application/xml", "rf", "image/vnd.rn-realflash", "rgb", "image/x-rgb", "rgs", "text/plain", "rm", "application/vnd.rn-realmedia", "rmi", "audio/mid", "rmp", "application/vnd.rn-rn_music_package", "roff", "application/x-troff", "rpm", "audio/x-pn-realaudio-plugin", "rqy", "text/x-ms-rqy", "rtf", "application/rtf", "rtx", "text/richtext", "ruleset", "application/xml", "s", "text/plain", "safariextz", "application/x-safari-safariextz", "scd", "application/x-msschedule", "sct", "text/scriptlet", "sd2", "audio/x-sd2", "sdp", "application/sdp", "sea", "application/octet-stream", "searchConnector-ms", "application/windows-search-connector+xml", "setpay", "application/set-payment-initiation", "setreg", "application/set-registration-initiation", "settings", "application/xml", "sgimb", "application/x-sgimb", "sgml", "text/sgml", "sh", "application/x-sh", "shar", "application/x-shar", "shtml", "text/html", "sit", "application/x-stuffit", "sitemap", "application/xml", "skin", "application/xml", "sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12", "sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide", "slk", "application/vnd.ms-excel", "sln", "text/plain", "slupkg-ms", "application/x-ms-license", "smd", "audio/x-smd", "smi", "application/octet-stream", "smx", "audio/x-smd", "smz", "audio/x-smd", "snd", "audio/basic", "snippet", "application/xml", "snp", "application/octet-stream", "sol", "text/plain", "sor", "text/plain", "spc", "application/x-pkcs7-certificates", "spl", "application/futuresplash", "src", "application/x-wais-source", "srf", "text/plain", "SSISDeploymentManifest", "text/xml", "ssm", "application/streamingmedia", "sst", "application/vnd.ms-pki.certstore", "stl", "application/vnd.ms-pki.stl", "sv4cpio", "application/x-sv4cpio", "sv4crc", "application/x-sv4crc", "svc", "application/xml", "swf", "application/x-shockwave-flash", "t", "application/x-troff", "tar", "application/x-tar", "tcl", "application/x-tcl", "testrunconfig", "application/xml", "testsettings", "application/xml", "tex", "application/x-tex", "texi", "application/x-texinfo", "texinfo", "application/x-texinfo", "tgz", "application/x-compressed", "thmx", "application/vnd.ms-officetheme", "thn", "application/octet-stream", "tif", "image/tiff", "tiff", "image/tiff", "tlh", "text/plain", "tli", "text/plain", "toc", "application/octet-stream", "tr", "application/x-troff", "trm", "application/x-msterminal", "trx", "application/xml", "ts", "video/vnd.dlna.mpeg-tts", "tsv", "text/tab-separated-values", "ttf", "application/octet-stream", "tts", "video/vnd.dlna.mpeg-tts", "txt", "text/plain", "u32", "application/octet-stream", "uls", "text/iuls", "user", "text/plain", "ustar", "application/x-ustar", "vb", "text/plain", "vbdproj", "text/plain", "vbk", "video/mpeg", "vbproj", "text/plain", "vbs", "text/vbscript", "vcf", "text/x-vcard", "vcproj", "Application/xml", "vcs", "text/plain", "vcxproj", "Application/xml", "vddproj", "text/plain", "vdp", "text/plain", "vdproj", "text/plain", "vdx", "application/vnd.ms-visio.viewer", "vml", "text/xml", "vscontent", "application/xml", "vsct", "text/xml", "vsd", "application/vnd.visio", "vsi", "application/ms-vsi", "vsix", "application/vsix", "vsixlangpack", "text/xml", "vsixmanifest", "text/xml", "vsmdi", "application/xml", "vspscc", "text/plain", "vss", "application/vnd.visio", "vsscc", "text/plain", "vssettings", "text/xml", "vssscc", "text/plain", "vst", "application/vnd.visio", "vstemplate", "text/xml", "vsto", "application/x-ms-vsto", "vsw", "application/vnd.visio", "vsx", "application/vnd.visio", "vtx", "application/vnd.visio", "wav", "audio/wav", "wave", "audio/wav", "wax", "audio/x-ms-wax", "wbk", "application/msword", "wbmp", "image/vnd.wap.wbmp", "wcm", "application/vnd.ms-works", "wdb", "application/vnd.ms-works", "wdp", "image/vnd.ms-photo", "webarchive", "application/x-safari-webarchive", "webtest", "application/xml", "wiq", "application/xml", "wiz", "application/msword", "wks", "application/vnd.ms-works", "WLMP", "application/wlmoviemaker", "wlpginstall", "application/x-wlpg-detect", "wlpginstall3", "application/x-wlpg3-detect", "wm", "video/x-ms-wm", "wma", "audio/x-ms-wma", "wmd", "application/x-ms-wmd", "wmf", "application/x-msmetafile", "wml", "text/vnd.wap.wml", "wmlc", "application/vnd.wap.wmlc", "wmls", "text/vnd.wap.wmlscript", "wmlsc", "application/vnd.wap.wmlscriptc", "wmp", "video/x-ms-wmp", "wmv", "video/x-ms-wmv", "wmx", "video/x-ms-wmx", "wmz", "application/x-ms-wmz", "wpl", "application/vnd.ms-wpl", "wps", "application/vnd.ms-works", "wri", "application/x-mswrite", "wrl", "x-world/x-vrml", "wrz", "x-world/x-vrml", "wsc", "text/scriptlet", "wsdl", "text/xml", "wvx", "video/x-ms-wvx", "x", "application/directx", "xaf", "x-world/x-vrml", "xaml", "application/xaml+xml", "xap", "application/x-silverlight-app", "xbap", "application/x-ms-xbap", "xbm", "image/x-xbitmap", "xdr", "text/plain", "xht", "application/xhtml+xml", "xhtml", "application/xhtml+xml", "xla", "application/vnd.ms-excel", "xlam", "application/vnd.ms-excel.addin.macroEnabled.12", "xlc", "application/vnd.ms-excel", "xld", "application/vnd.ms-excel", "xlk", "application/vnd.ms-excel", "xll", "application/vnd.ms-excel", "xlm", "application/vnd.ms-excel", "xls", "application/vnd.ms-excel", "xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12", "xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12", "xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlt", "application/vnd.ms-excel", "xltm", "application/vnd.ms-excel.template.macroEnabled.12", "xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template", "xlw", "application/vnd.ms-excel", "xml", "text/xml", "xmta", "application/xml", "xof", "x-world/x-vrml", "XOML", "text/plain", "xpm", "image/x-xpixmap", "xps", "application/vnd.ms-xpsdocument", "xrm-ms", "text/xml", "xsc", "application/xml", "xsd", "text/xml", "xsf", "text/xml", "xsl", "text/xml", "xslt", "text/xml", "xsn", "application/octet-stream", "xss", "application/xml", "xtp", "application/octet-stream", "xwd", "image/x-xwindowdump", "z", "application/x-compress", "zip", "application/x-zip-compressed"
EndDataSection
.....i Love Pb :)
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: "http" et la création d un lien streaming ....

Message par Marc56 »

Ça m'intéresse aussi, si tu arrives à faire une lecture de flux radio
(ne plus avoir à trainer fmodex.dll, juste pour cette fonction)
La lib PB movie lit très bien les mp3 locaux, mais pas en flux http
:)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: "http" et la création d un lien streaming ....

Message par falsam »

Hello Celtic.

J'ai un souci avec tes codes de streaming-replay.

Ce code http://www.purebasic.fr/french/viewtopi ... 22#p191522 fonctionne avec la musique mais pas avec les vidéos.

Les mises à jours qui suivent ne fonctionne pas du tout avec les mp3 et les vidéos.
- http://www.purebasic.fr/french/viewtopi ... 94#p191794
- http://www.purebasic.fr/french/viewtopi ... 00#p191800

Je n'ai pas réussi à voir ce qui n'allait pas. Les clients se connectent bien mais ne reçoivent rien.

J'espére que tu passeras par ici.

Et pour ceux qui liront ce commentaire aujourd'hui, je vous offre un titre à écouter en replay avec Chrome , Firefox, Opera, .... (mais pas IE et surtout pas Opera Mini).

̶N̶̶̶i̶̶̶n̶̶̶a̶̶̶ ̶̶̶S̶̶̶i̶̶̶m̶̶̶o̶̶̶n̶̶̶e̶̶̶ ̶̶̶-̶̶̶ ̶̶̶I̶̶̶ ̶̶̶p̶̶̶u̶̶̶t̶̶̶ ̶̶̶a̶̶̶ ̶̶̶s̶̶̶p̶̶̶e̶̶̶l̶̶̶l̶̶̶ ̶̶̶o̶̶̶n̶̶̶ ̶̶̶y̶̶̶o̶̶̶u̶̶̶
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: "http" et la création d un lien streaming ....

Message par Ollivier »

Remarque : OperaMini échec

Par contre, étrangement, ce truc fonctionne :

(contenu du lien)[url]vnd.youtube:r9SENzRLk_M?vndapp=youtube_mobile&vndclient=mv-google&vndel=watch[/url]

(Lien http) Vera Hall - Trouble so hard

PS : Trop de temps à tenter de trouver le préfixe fonctionnel du "truc" plus haut (je ne sais pas comment s'appelle cette chaîne).
Répondre