YouTube UDF mit API ?

  • Hey,

    also bevor mal die erste Meldung kommt wie:

    Zitat

    Wieso gibt es Google?

    Also. Ich brauch eine UDF oder ähnliches, mit dem ich die YouTube Videos im Hintergrund zum Laufen bringe. Also eigentlich nur den Sound. Keine Angst, habe nichts illegales vor ^^. Ja, dann sollte ich das Video mit der Google API steuern können. Also dass ich die Volume steuern/auslesen, die Zeit steuern und ich es Play/Pausen kann. Hoffe, ihr könnt mir helfen. Habe schon das hier probiert:

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <IE.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ===================================================================
    ; Name ..........: _IE_YT
    ; Description ...: YouTube API for IE.au3
    ; AutoIt Version : V3.3.0.0
    ; Requirement(s).: IE.au3
    ; Syntax ........: _IE_YT(ByRef $Socket[, $sCommand = "playVideo"[, $vArg1 = ""[, $vArg2 = ""[, $sPlayerID = "movie_player"]]]])
    ; Parameter(s): .: $oIE - IE Object
    ; $sCommand - Optional: (Default = "playVideo") :
    ; | loadWait / $vArg1 = TimeOut in ms (int), Default = 10000
    ; | playVideo
    ; | pauseVideo
    ; | stopVideo
    ; | clearVideo
    ; | getVideoBytesLoaded
    ; | getvideobytestotal
    ; | getVideoStartBytes
    ; | mute
    ; | unMute
    ; | isMuted
    ; | setVolume / $vArg1 = Volume (int) (min=0, max=100)
    ; | getVolume
    ; | seekTo / $vArg1 = Secs (int), $vArg2 = allowSeekAhead (boolean), Default = true
    ; | getPlayerState
    ; | getCurrentTime
    ; | getDuration
    ; | setSize / $vArg1 = height (int), $vArg2 = width (int) (min=50)
    ; | getVideoUrl
    ; | getVideoEmbedCode
    ; | loadVideoById / $vArg1 = id (string), $vArg2 = start (int)
    ; | cueVideoById / $vArg1 = id (string), $vArg2 = start (int)
    ; $vArg1 - Optional: (Default = "") :
    ; $vArg2 - Optional: (Default = "") :
    ; $sPlayerID - Optional: (Default = "movie_player") :
    ; Return Value ..: Success - Deppending on the function call
    ; Failure - Deppending on the function call and sets
    ; @ERROR - 1 = error while sending command to player or no player found
    ; | 2 = wrong value or datatype of $vArg1 or $vArg2
    ; | 3 = wrong or unsupported $sCommand
    ; | 4 = wrong datatype returned from API
    ; | 5 = TimeOut from "loadWait"
    ; Author(s) .....: Thorsten Willert, iLoveAU3 (loadVideoById, cueVideoById), SEuBo (modification for IE.au3)
    ; Remarks .......: Currently not supported: setSize (Video), addEventListener, all events
    ; Date ..........: Tue Apr 28 22:20:44 CEST 2009 @889 /Internet Time/
    ; Link ..........: http://code.google.com/intl/de-DE/api…_reference.html
    ; Example .......: _IE_YT($Socket,"pauseVideo"), _IE_YT($Socket,"setSize",480,385)
    ; ==============================================================================
    Func _IE_YT($oIE, $sCommand = "playVideo", $vArg1 = "", $vArg2 = "", $sPlayerID = "movie_player")
    Local $iRet

    [/autoit] [autoit][/autoit] [autoit]

    Switch StringLower($sCommand)
    Case "loadwait"
    ;dummy
    Case "playvideo"
    $sCommand = "playVideo()"
    $iRet = 0
    Case "pausevideo"
    $sCommand = "pauseVideo()"
    $iRet = 0
    Case "stopvideo"
    $sCommand = "stopVideo()"
    $iRet = 0
    Case "clearvideo"
    $sCommand = "clearVideo()"
    $iRet = 0
    Case "getvideobytesloaded"
    $sCommand = "getVideoBytesLoaded()"
    $iRet = 1
    Case "getvideobytestotal"
    $sCommand = "getVideoBytesTotal()"
    $iRet = 1
    Case "getvideostartbytes"
    $sCommand = "getVideoStartBytes()"
    $iRet = 1
    Case "mute"
    $sCommand = "mute()"
    $iRet = 0
    Case "unmute"
    $sCommand = "unMute()"
    $iRet = 0
    Case "ismuted"
    $sCommand = "isMuted()"
    $iRet = 1
    Case "setvolume"
    $vArg1 = Number($vArg1)
    If IsInt($vArg1) And $vArg1 >= 0 And $vArg1 <= 100 Then
    $sCommand = "setVolume(" & $vArg1 & ")"
    Else
    SetError(2)
    Return -2
    EndIf
    $iRet = 0
    Case "getvolume"
    $sCommand = "getVolume()"
    $iRet = 1
    Case "seekto"
    $vArg1 = Number($vArg1)
    If $vArg2 = "" Or $vArg2 = Default Then $vArg2 = True
    If IsInt($vArg1) And IsBool($vArg2) Then
    If $vArg2 Then
    $vArg2 = "true"
    Else
    $vArg2 = "false"
    EndIf
    $sCommand = "seekTo(" & $vArg1 & "," & $vArg2 & ")"
    Else
    SetError(2)
    Return -2
    EndIf
    $iRet = 0
    Case "getplayerstate"
    $sCommand = "getPlayerState()"
    $iRet = 1
    Case "getcurrenttime"
    $sCommand = "getCurrentTime()"
    $iRet = 1
    Case "getduration"
    $sCommand = "getDuration()"
    $iRet = 1
    Case "setsize"
    $vArg1 = Number($vArg1)
    $vArg2 = Number($vArg2)
    If $vArg2 = 0 Or $vArg2 = Default Then $vArg2 = $vArg1
    If IsInt($vArg1) And IsInt($vArg2) And $vArg1 > 50 And $vArg2 > 50 Then
    $sCommand = "setSize(" & $vArg1 & "," & $vArg2 & ")"
    Else
    SetError(2)
    Return -2
    EndIf
    $iRet = 0
    Case "getvideourl"
    $sCommand = "getVideoUrl()"
    $iRet = 2
    Case "getvideoembedcode"
    $sCommand = "getVideoEmbedCode()"
    $iRet = 2
    Case "loadVideoById"
    $vArg1 = String($vArg1)
    $vArg2 = Number($vArg2)
    If $vArg2 = Default Or $vArg2 = "" Then $vArg2 = 0
    If IsString($vArg1) And IsNumber($vArg2) Then
    $sCommand = "loadVideoById('" & $vArg1 & "'," & $vArg2 & ")"
    Else
    SetError(2)
    Return -2
    EndIf
    Case "cueVideoById"
    $vArg1 = String($vArg1)
    $vArg2 = Number($vArg2)
    If $vArg2 = Default Or $vArg2 = "" Then $vArg2 = 0
    If IsString($vArg1) And IsNumber($vArg2) Then
    $sCommand = 'cueVideoById("' & $vArg1 & '",' & $vArg2 & ")"
    Else
    SetError(2)
    Return -2
    EndIf
    Case Else
    SetError(3)
    Return -2
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    If $sCommand <> "loadwait" Then
    Local $vRetVal = $oIE.document.parentwindow.execScript(StringFormat("try{document.getElementById('%s').%s;}catch(e){'_IE_YT_Error'}", $sPlayerID, $sCommand))
    If Not @error And $vRetVal <> "_IE_YT_Error" Then
    Switch $iRet
    Case 0
    If $vRetVal = "" Then
    Return $vRetVal
    Else
    SetError(4)
    Return ""
    EndIf
    Case 1
    If IsNumber(Number($vRetVal)) Then
    Return $vRetVal
    Else
    SetError(4)
    Return -2
    EndIf
    Case 2
    If IsString($vRetVal) Then
    Return $vRetVal
    Else
    SetError(4)
    Return ""
    EndIf
    EndSwitch
    Else
    SetError(1)
    Return -2
    EndIf
    Else
    If $vArg1 = "" Or Not IsInt(Number($vArg1)) Then $vArg1 = 10000
    Local $TimeOutTimer = TimerInit()
    Local $sState
    Do
    $sState = _IE_YT("getPlayerState")
    If @error Then Return 0
    Sleep(500)
    If TimerDiff($TimeOutTimer) > $vArg1 Then
    SetError(5)
    Return 0
    EndIf
    Until $sState <= 3 Or $sState = "_IE_YT_Error"
    Return 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_IE_YT

    [/autoit]

    Ich bekomme dann aber immer den Fehler
    "Variable must be of type 'Object'"

    Cheers,

    StevenX

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

    2 Mal editiert, zuletzt von Stevenx (3. Februar 2013 um 20:07)

  • Hat keiner eine Lösung? :/

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

  • Sag mal... Was soll denn das!? Du lieferst hier einen obskuren Beitrag in dem nirgendwo eine Frage steht außer im Titel. Dann sagst du, du hättest bereits Lösungen probiert nennst aber keine einzige bzw. wieso sie nicht funktioniert haben.
    Das alles wäre ja kein Problem, aber jetzt meinst du nach 4 Stunden bereits deinen Thread pushen zu müssen? 8| Du brauchst dich nicht wundern, dass bis jetzt keiner eine Lösung gepostet hat. Stell erstmal eine richtige Frage.
    Deinem jetzigen Thread entsprechend ürde meine Antwort nämlich folgendermaßen lauten: "Youtube Videos abspielen? Ganz einfach. Im Browser öffnen und auf abspielen drücken."

  • Ich stells mal richtig. Wenigstens habe ich den Anstand, nicht
    #push
    zu schreiben, sondern höflich zu fragen.

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

  • Ganz einfach: Per EmbeddedIE ein YouTube-Video einbinden. ;)
    Der Link für den Fullscreen-Player sieht so aus:

    Code
    http://www.youtube.com/embed/VIDEO_ID


    Dann gibt es dazu noch ein paar Parameter, die du nutzen kannst:
    https://developers.google.com/youtube/player_parameters?hl=de

    Als Beispiel:

    [autoit]


    #include <IE.au3>

    [/autoit][autoit][/autoit][autoit]

    $hGUI = GUICreate("YouTube-Test", 250, 250)
    $oIE = _IECreateEmbedded()
    GUICtrlCreateObj($oIE, 0, 0, 250, 250)

    [/autoit][autoit][/autoit][autoit]

    GUISetState()
    _IENavigate($oIE, "http://www.youtube.com/embed/GmfyBUxOihM?autoplay=1&start=" & 60 * 50 & "&end=" & 60 * 51)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Do
    Sleep(50)
    Until GUIGetMsg() = -3

    [/autoit]

    Sieht man ja.^^

    chess

  • Ja, brauch aber auch mehr Einstellungen, wie Zeit steuern, Volume und Co. Siehe #post1

    Cheers

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

  • Die Zeit habe ich doch bereits gesteuert, per "start=x&end=y".
    Dann kannst du noch über "enablejsapi=1" und die dazu passende JavaScript-API den Rest machen.
    Allerhöchstens die Länge auslesen könnte schwer werden, da du von JS nur schwer Infos zurück nach AutoIt bekommst.
    Edit: Hab gerade die Methode "execScript" entdeckt. Damit sollte auch das gehen!

    chess

  • Weil Google das sowas von unübersichtlich macht und niemand eine gescheite UDF für YouTube geschrieben hat, setzen wir uns mal daran:

    DerBrot
    Developer30
    Und natürlich ich,
    StevenX

    Wir posten es dann natürlich hier :D

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!