Seite 1 von 2

RadioStream: Browser initialisieren ?

Verfasst: 15.10.2008 21:38
von sibru
Hallo,
ich hab´ ´n RadioStream-Player gebaut, der auch ganz gut klappt...:allright:
Nur, wenn ich das Prg nach´m hochfahren starte, klappt nicht´s mehr.
Erst nach Starten und sofortiges Beenden des Internet-Browsers kommt was an den Lautsprechern an...:o
Weiss jemand, ob / wie ich den Browser initialisieren kann / muss ??

Code: Alles auswählen

Procedure.l StreamPlay(URL.s)       ;- Start RadioStream-Output
  Protected Browser.IWebBrowser2
  Protected Document.IHTMLDocument2
  Protected DocumentDispatch.IDispatch
  Protected result.l, Busy.l, Unicode.s, bstr_string.l, *sfArray, *varParam.VARIANT
  Protected Html.s, WebGad
  ;erstmal HTML-Steuerung aufbauen:
  Html + "<object id='VIDEO' width='0' height='0'" 
  Html + "style='position:absolute; left:0; top:0;'"
  Html + "classid='clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6'" ;normal video
  Html + "type='application/x-oleobject'>"
  Html + "<param name='URL' value='" + URL + "'>"
  ;  Html + "<param name='volume' value='" + Str(GetGadgetState(#Volume)) + "'>"
  Html + "<param name='StretchToFit' value='true'>"
  Html + "<param name='UiMode' value='mini'>"
  Html + "<param name='EnableContextMenu' value='false'>"
  Html + "</object>"
  WebGad=WebGadget(#PB_Any,0,0,0,0,"about:blank",#PB_Web_Mozilla) ;gadget aufbauen...
  HideGadget(WebGad,1)                                     ;... und gleich verstecken
  Browser = GetWindowLong_(GadgetID(WebGad), #GWL_USERDATA)
  Repeat ;warten, bis browser bereit...
    While WindowEvent(): Wend
    Browser\get_Busy(@Busy)
    If Busy : Delay(10) : EndIf
  Until Not Busy 
  If Browser
    If Browser\get_document(@DocumentDispatch) = #S_OK And DocumentDispatch
      If DocumentDispatch\QueryInterface(?IID_IHTMLDocument2, @Document) = #S_OK
        If Document
          Unicode = Space(Len(Html) * 2 + 2)
          PokeS(@Unicode, Html, - 1, #PB_Unicode)
          bstr_string = SysAllocString_(@Unicode)
          *sfArray = SafeArrayCreateVector_(#VT_VARIANT, 0, 1)
          If *sfArray
            If SafeArrayAccessData_(*sfArray, @*varParam) = #S_OK
              *varParam\vt = #VT_BSTR
              *varParam\bstrVal = bstr_string
              If SafeArrayUnaccessData_(*sfArray) = #S_OK
                Document\write(*sfArray)
                result = #True ;Document written
              EndIf
            EndIf
            SafeArrayDestroy_(*sfArray)
          EndIf
          SysFreeString_(bstr_string)
        EndIf
        Document\close()
        Document\Release()
      EndIf
      DocumentDispatch\Release()
    EndIf
  EndIf
  ProcedureReturn result
  DataSection
  IID_IHTMLDocument2: ;{332C4425-26CB-11D0-B483-00C04FD90119}
  Data.l $332C4425
  Data.w $26CB, $11D0
  Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
EndDataSection
EndProcedure



WinID=OpenWindow(0,0,0,0,0,"Radio",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WinID)

StreamPlay("http://ice.streaming.spacenet.de:80/dieneue1077_80er")

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Gruss Siggi

Re: RadioStream: Browser initialisieren ?

Verfasst: 15.10.2008 22:44
von Kiffi
@sibru:

keine Ahnung, warum Dein Code bei Dir nicht so läuft, wie erwartet, bei
mir hat er's auf Anhieb getan.

Allerdings hat sich PB-technisch in der Zwischenzeit auch einiges getan,
so dass Du auf den ganzen Dispatch-Kram auch leicht verzichten kannst,
was einen leichter verständlichen Code zur Folge hat:

Code: Alles auswählen

Enumeration
  #MyWindow
  #WebGadget
EndEnumeration

OpenWindow(#MyWindow,0,0,0,0,"Radio",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#MyWindow))

;erstmal HTML-Steuerung aufbauen:
Html.s
Html + "<object id='VIDEO' width='0' height='0'"
Html + "style='position:absolute; left:0; top:0;'"
Html + "classid='clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6'" ;normal video
Html + "type='application/x-oleobject'>"
Html + "<param name='URL' value='http://ice.streaming.spacenet.de:80/dieneue1077_80er'>"
;  Html + "<param name='volume' value='" + Str(GetGadgetState(#Volume)) + "'>"
Html + "<param name='StretchToFit' value='true'>"
Html + "<param name='UiMode' value='mini'>"
Html + "<param name='EnableContextMenu' value='false'>"
Html + "</object>"

WebGadget(#WebGadget,0,0,0,0,"about:blank",#PB_Web_Mozilla) ;gadget aufbauen...

While GetGadgetAttribute(#WebGadget, #PB_Web_Busy) <> 0
  While WindowEvent() : Delay(0) : Wend
Wend

SetGadgetItemText(#WebGadget, #PB_Web_HtmlCode, Html)

  
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Probier's mal aus. Vielleicht hast Du damit weniger Probleme.

Grüße ... Kiffi

// Edit: Grade gesehen: Du verwendest ja PB3.8 :oops:
Naja, ich lasse es mal drin. Vielleicht braucht's ja noch ein anderer (oder
es bewegt Dich endlich zum Kauf der neuen 4.2 ;-))

Verfasst: 16.10.2008 01:14
von sibru
Danke für die Optimierung, ist doch viel leichter lesbar als die alte Version...
Hat jedoch das eigentliche Prob nicht verändert, hab´ nun halt ´n kleinen
Internet-Downoad vor´s Radio im AutoStart gelegt... und nun kommt das
Radio sauber und ohne manuelle Aktion nach´m Hochfahren: Ziel erreicht...

... und Signatur korrigiert ;-)

Gruss Siggi

Verfasst: 16.10.2008 01:47
von Sven
Cool. Funktioniert.

Aber macht man das so beim Streaming?

Verfasst: 16.10.2008 10:24
von Kiffi
@sibru: Dann hat es sich ja doch gelohnt ;-)
Sven hat geschrieben:Aber macht man das so beim Streaming?
joah, kann man so machen. Viele Wege führen nach Rom. Funktioniert ja auch einwandfrei :-)

Für 'aufwändigere' Methoden böten sich fmod und bass an (Codes für beides
sind hier und im englischen Forum vorhanden; einfach mal SuFu aktivieren).

Grüße ... Kiffi

Verfasst: 16.10.2008 10:36
von Sven
Das heisst aber, IE oder Firefox müssen installiert sei, weil ja das WebGadget darauf basiert, oder?

Ich überleg schon länger, mal einen kleinen I-Radioplayer zu bauen, weil mir verfügbare zu viel Overhead (großes Programmfenster, überflüssige Anzeigen) mitbringen oder nicht alle Formate (Winamp) können.

Verfasst: 16.10.2008 10:49
von Kiffi
Sven hat geschrieben:Das heisst aber, IE oder Firefox müssen installiert sei, weil ja das WebGadget darauf basiert, oder?
bei dem IE ist das so. Allerdings sollte Dir das nicht allzugrosse
Kopfschmerzen bereiten. Ich schätze mal, dass auf 99% aller aktuellen
Windows-Rechner auch ein IE installiert ist. ;-)

Wenn Du den Ff nutzen möchtest, benötigst Du auf jeden Fall noch eine
ActiveX-DLL (den Link dazu müsstest Du Dir hier im Board raussuchen). So
von alleine lässt sich der Ff jedenfalls nicht in PB verwenden.
Sven hat geschrieben:Ich überleg schon länger, mal einen kleinen I-Radioplayer zu bauen
Vielleicht kannst Du Dich ja von PureProggers Streamplayer inspirieren lassen:

http://www.purebasic.fr/german/viewtopi ... 837#194837

Grüße ... Kiffi

Verfasst: 16.10.2008 11:26
von Kaeru Gaman
ein minimum-IE ist zwangsweise drauf, bei XP ist das glaubich der 5er.
mir ist nicht bekannt, dass man den bei der Installation des Betriebssystems ausschließen könnte.
der ist übrigens auch nötig, um Windows-Updates durchzuführen.

Verfasst: 20.10.2008 20:07
von Grillmeister
Hallo Sibru und Sven !

Ich hatte/habe auch so ein kleines Projekt (war eigentlich nur eine "Schnapsidee" die sich mittlerweile zu einem Dauerprojekt entwickelt hat).
Ich habe mit Purebasic und FMOD einen Internetradioplayer gebastelt der ausschließlich einen Stream von einem Radiosender abspielt und auf "Einfachheit" sowie "idiotensichere Bedienung" setzt.
Der Player ist noch lange nicht "perfect", aber er wird, erstaunlicherweise, ganz gut angenommen.
Ich kann bei solchen Angelegenheiten wirklich raten Euch mit FMOD zu beschäftigen - das Teil ist echt mächtig und wenn man es einmal verstanden hat, auch sehr gut anzuwenden.

Wenn Ihr Euch meinen Player mal anschauen, ausprobieren und eventuell inspirieren lassen wollt, könnt Ihr ihn gerne mal ausprobieren.
Ich hoffe ich vertoße gegen keine Regeln wenn ich den Link hier angebe: http://www.terpe.info/index.php?option= ... &Itemid=32
Der Link soll auch keine Werbung sein, ich mache das tatsächlich freiwillig, kostenlos aus Überzeugung (ja sowas gibt es noch).
Runterladen könnt Ihr den Player gaaanz unten auf der Seite.

Grüße,
Grillmeister

Verfasst: 06.07.2009 16:03
von Crawler
Basierend auf Kiffis Code habe ich mir einen kleinen Player für meine drei liebsten Radiostreams zusammengeschustert, scheitere aber noch an einer vernünftigen Lautstärkeregelung.
Anfangs hatte ich vor, die Systemlautstärke über die Windows-API einzustellen, was auch sicherlich klappen würde. Lieber wäre mir jedoch eine programminterne Regelung. Gibt es hier irgendwelche Ideen, wie man dies hier realisieren könnte? Auf fmod bzw. bass wollte ich nicht ausweichen...

Gruß Crawler