Page 1 sur 1

Protocole rtsp:// non supporté ???

Publié : lun. 23/sept./2024 15:56
par cage
Bonjour a tous,

Étant abonné Freebox, j'ai accès au multiposte TV via l’URL "https://mafreebox.freebox.fr/freeboxtv/playlist.m3u"

Certaines chaines sont accessibles a tous alors que d'autres uniquement sur abonnement.

Je souhaite tester avant d'ouvrir une chaine si elle est bien disponible (sans abonnement)

Lorsque je teste un lien vidéo, par exemple France2 "rtsp://mafreebox.freebox.fr/fbxtv_pub/stream?namespace=1&service=201"

j'obtiens le message 'Protocol "rtsp" not supported or disabled in libcurl'

Avez vous une idée d'où peut se situer le problème.

Voici le code que j'utilise:

Code : Tout sélectionner

EnableExplicit

Global HttpRequest
Global HttpStatusCode$, HttpErrorMessage$, URL$, ERREUR$, Message$

Procedure.a messageBox(request = #False)
  If Message$ = #Null$
    ProcedureReturn #False
  EndIf
  Protected msg$ = Message$
  Protected flag = #PB_MessageRequester_Ok ;|#MB_ICONINFORMATION
  If request
    flag = #PB_MessageRequester_YesNo ; |#MB_ICONQUESTION
  EndIf
  Message$ = #Null$
  ProcedureReturn MessageRequester("Message", msg$, flag | #MB_TOPMOST | #MB_DEFBUTTON2)
  ; Questions:
  ; #PB_MessageRequester_Ok
  ; #PB_MessageRequester_YesNo
  ; #PB_MessageRequester_YesNoCancel
  ; Réponses:
  ; 0 = Message$ #Empty$
  ; 1 = Ok
  ; 2 = Cancel
  ; 6 = Yes
  ; 7 = No
EndProcedure

NewMap Header$()
Header$("Content-Type") = "plaintext"
Header$("User-Agent")   = "Firefox 54.0"

HTTPTimeout(5000)

URL$="rtsp://mafreebox.freebox.fr/fbxtv_pub/stream?namespace=1&service=201"

HttpRequest=HTTPRequest(#PB_HTTP_Post,URL$,"",0,Header$())

HTTPTimeout(#PB_Default)

ResetMap(Header$())

Debug "HttpRequest : " + HttpRequest
 
HttpStatusCode$  =HTTPInfo(HttpRequest,#PB_HTTP_StatusCode)
HttpErrorMessage$=HTTPInfo(HTTPRequest,#PB_HTTP_ErrorMessage)
Debug "StatusCode: "   + HttpStatusCode$
Debug "ErrorMessage: " + HttpErrorMessage$
Debug "Média : "       + URL$

If HttpRequest
  FinishHTTP(HttpRequest)
  If FindString(HttpErrorMessage$,"Connection timed out",0,#PB_String_NoCase)
    Message$="Le serveur vidéo met trop de temps à répondre"
    messageBox(#False)
    End
  EndIf
  If FindString(HttpErrorMessage$,"Failed to connect",0,#PB_String_NoCase)
    Message$="Connexion refusée par le serveur"
    messageBox(#False)
    End
  EndIf

  ERREUR$ = "HTTP ERREUR "+HttpStatusCode$+" : "
  Select HttpStatusCode$
    Case "0"
    Case "401" : Message$ = ERREUR$+"Vidéo non autorisée"
    Case "403" : Message$ = ERREUR$+"L'accès à la vidéo a été refusé"
    Case "404" : Message$ = ERREUR$+"Vidéo non trouvée"
    Case "406" : Message$ = ERREUR$+"Vidéo non disponible"
    Case "502" : Message$ = ERREUR$+"Mauvaise passerelle ou proxy"
    Default    : Message$ = ERREUR$+"Erreur non définie"
  EndSelect
  messageBox(#False)
  If HttpStatusCode$ <> "0"
    messageBox(#False)
    End
  EndIf
Else
  Debug "VIDEO INDISPONIBLE"
  Message$="Erreur inconnue"
  messageBox(#False)
  End
EndIf
Code testé avec les versions PB de la 5.73 LTS a la 6.12 LTS
Merci d'avance pour votre retour,
cage

Re: Protocole rstp:// non supporté ???

Publié : lun. 23/sept./2024 16:47
par Marc56
Bonjour Cage,

La version lib PB de curl ne contient pas ce protocol, ni la version d'origine de windows 10.
La version complète (à télécharger sur le site officiel (curl.se)) le contient, mais je ne sais pas comment l'utiliser dans ton code.

:wink:

Re: Protocole rtsp:// non supporté ???

Publié : lun. 23/sept./2024 23:26
par cage
Bonsoir Marc56,

Merci pour la rapidité de ta réponse.

J'ai pris le temps de regarder le site officiel de curl et de faire quelques essais mais sans succès.

Utilisant déjà ffmpeg.exe dans mes applis PB, j'ai regardé du coté de ffprobe.exe

Au final, je m'en sort assez bien avec ffprobe pour tester les liens rtsp://

Voici le code qui permet de tester l'accessibilité des liens vidéos avec et sans abonnement.

Code : Tout sélectionner

EnableExplicit

; Télécharger ffmpeg.exe, ffprobe.exe, ffplay.exe
; https://www.ffmpeg.org

Define ffprobe$, URL$

ffprobe$="ffprobe.exe" ; ffprobe.exe doit être dans la variable %PATH% et doit être autorisé dans le FireWall

;commenter une des 2 URL suivantes
URL$="rtsp://mafreebox.freebox.fr/fbxtv_pub/stream?namespace=1&service=201" ; FRANCE 2 (auto) sans abonnement
;URL$="rtsp://mafreebox.freebox.fr/fbxtv_pub/stream?namespace=1&service=253" ; MANGAS (auto)   avec abonnement

If Left(URL$,7) = "rtsp://"
  ;ffprobe.exe -v fatal URL$
  ;return 0 vidéo disponible
  ;return 1 vidéo indisponible
  Define flags=#PB_Program_Open|#PB_Program_Read|#PB_Program_Hide
  Define ffprobe = RunProgram(ffprobe$,"-v fatal "+URL$,"",flags)
  Define Output$ = ""
  If ffprobe
    While ProgramRunning(ffprobe)
      If AvailableProgramOutput(ffprobe)
        Output$ + ReadProgramString(ffprobe) + Chr(13)
        Debug Output$
      EndIf
      ;Delay(50)
    Wend
    Define exitcode=ProgramExitCode(ffprobe)
    CloseProgram(ffprobe)
    Output$ + Chr(13) + Chr(13)
    Output$ + "Exitcode: " + Str(exitcode)
    Debug Output$
    If exitcode <> 0
      MessageRequester("Test RTSP","Vidéo non disponible",#PB_MessageRequester_Ok|#PB_MessageRequester_Error)
    Else
      MessageRequester("Test RTSP","Vidéo disponible",#PB_MessageRequester_Ok|#PB_MessageRequester_Info)
    EndIf
  EndIf
EndIf
Si l'un d'entre vous a une solution différente, je suis preneur.
cage