Jump to content
Belini

Abrir vídeo em tela cheia usando UDF Video.au3

Recommended Posts

Alguém sabe se tem como abrir vídeos diferentes preenchendo a tela toda sem as tarjas pretas de lado?

Video.au3

#include-once

; #CURRENT# ===============================================================================================
; _Video_Close
; _Video_Dimension
; _Video_FrameRate
; _Video_Length
; _Video_Mute
; _Video_Open
; _Video_Pause
; _Video_Play
; _Video_Resume
; _Video_Seek
; _Video_Status
; _Video_Step
; _Video_Stop
; _Video_TimePos
; _Video_Volume
; _RandomStr
; _MSToHMS
; _mciDeviceExists
; _mciListDevices
; _mciSendString
;==========================================================================================================

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Close
; Description....: Close a video.
; Syntax.........: _Video_Close($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Return 1 and sets Alias name to "".
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = MCI failed to close video
; Author ........: smashly
; =========================================================================================================
Func _Video_Close(ByRef $sAlias)
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If _mciSendString("close " & $sAlias) = 0 Then
        $sAlias = ""
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Close

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Dimension
; Description....: Retrieves the Width and Height of the source video.
; Syntax.........: _Video_Dimension($sFile)
; Parameters ....: $sFile     - The full path to video file.
; Return values .: Success    - Returns an array. array[0] = Width, array[1] = Height
;                  Failure    - Return 0 and @error 1~3
;                               @error 1 = File doesn't exist.
;                               @error 2 = MCI failed to open the video file.
;                               @error 3 = MCI failed to get the source video dimensions.
; Author ........: smashly
; =========================================================================================================
Func _Video_Dimension($sFile)
    Local $iRet, $sVID, $aTmp
    If Not FileExists($sFile) Then Return SetError(1, 0, 0)
    $sVID = _RandomStr()
    $iRet = _mciSendString("open " & FileGetShortName($sFile) & " alias " & $sVID)
    If $iRet <> 0 Then Return SetError(2, 0, 0)
    $iRet = _mciSendString("where " & $sVID & " source", 255)
    If $iRet = "" Then
        _mciSendString("close " & $sVID)
        Return SetError(3, 0, 0)
    EndIf
    _mciSendString("close " & $sVID)
    $aTmp = StringSplit($iRet, Chr(32))
    $aTmp[1] = $aTmp[$aTmp[0]]
    $aTmp[0] = $aTmp[$aTmp[0] - 1]
    ReDim $aTmp[2]
    Return $aTmp
EndFunc   ;==>_Video_Dimension

; #FUNCTION# ==============================================================================================
; Name...........: _Video_FrameRate
; Description....: Close a video.
; Syntax.........: _Video_FrameRate($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Returns the Frames Per Second of the video.
;                  Failure    - Return 0 and @error 1
;                               @error 1 = Invalid Alias
; Author ........: smashly
; =========================================================================================================
Func _Video_FrameRate($sAlias)
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    Return _mciSendString("status " & $sAlias & " nominal frame rate", 255) / 1000
EndFunc   ;==>_Video_FrameRate

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Length
; Description....: Get the time length of a video in Milliseconds or Hours, Minutes, Seconds (HH:MM:SS)
; Syntax.........: _Video_Length($sAlias[, $iTime = 0])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open
;                  $iTime     - 0 Return time lenth in Hours, Minutes, Seconds (HH:MM:SS)
;                             - 1 Return time lenth in Milliseconds.
; Return values .: Success    - Return time length in Milliseconds or Hours, Minutes, Seconds (HH:MM:SS)
;                  Failure    - Return 0 and @error 1
;                               @error 1 = Invalid Alias
; Author ........: smashly
; =========================================================================================================
Func _Video_Length($sAlias, $iTime = 0)
    Local $iMS
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    _mciSendString("set " & $sAlias & " time format ms")
    $iMS = _mciSendString("status " & $sAlias & " length", 255)
    If Not $iTime Then Return _MSToHMS($iMS)
    If $iTime Then Return $iMS
EndFunc   ;==>_Video_Length

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Mute
; Description....: Turn off/on the audio in a video.
; Syntax.........: _Video_Mute($sAlias[, $iMute = 0])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iAudio    - 0 = Audio On, 1 = Audio Off
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = MCI failed to turn the video audio off/on
; Author ........: smashly
; =========================================================================================================
Func _Video_Mute($sAlias, $iMute = 0)
    Local $iRet, $iAM = "on"
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If $iMute Then $iAM = "off"
    $iRet = _mciSendString("set " & $sAlias & " audio all " & $iAM)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Mute

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Open
; Description ...: Opens a Video file ready for use with other _Video_xxxx functions.
; Syntax.........: _Video_Open($sFile, $hWnd, $iX, $iY, $iW, $iH[, $sDevice = ""])
; Parameters ....: $sFile     - The full path to video file.
;                  $hWnd      - Handle to a window or control that the video will be displayed on
;                  $iX        - Left position of the video.
;                  $iY        - Top position of the video.
;                  $iW        - Width of the video.
;                  $iH        - Height of the video.
;                  $sDevice   - MCI Device type to play video with. (See Remarks for more info)
; Return values .: Success    - Return an Alias name for use with other _Video_xxxx functions.
;                  Failure    - Return an empty String "" and @error 1~5
;                               @error 1 = File doesn't exist
;                               @error 2 = Window or Control handle not valid.
;                               @error 3 = Invalid MCI Device type specified.
;                               @error 4 = MCI failed to open video file
;                               @error 5 = MCI failed window for video.
;                               @error 5 = MCI failed to put video at the deignated location.
; Author ........: smashly
; Remarks .......: If your having trouble with avi playback (eg; playing fast, slow, choppy or no audio)
;                  or a video won't play but it plays fine in any other player ...
;                  Then set the $sDevice parameter to "MPEGVideo"
;                  If the $sDevice parameter is left blank then windows will decide which MCI Device type
;                  to use.
;                  Most current day avi/wmv/mp4 formats dont play properly or at all when windows selects
;                  the mci device type to use.
;                  Windows would default use "AVIVideo" MCI Device type to play avi with mci.
;                  When you specify "MPEGVideo" for an avi and mci fails it then uses the windows native
;                  chain of codecs that would be used by any other player not using mci ;)
;                  Because of this behaviour you can usually play almost any type of video that normally
;                  fails when using mci just by specifying "MPEGVideo" mci device type.
;                  For playing video on an autoit gui then be sure to add the $WS_CLIPCHILDREN style
;                  to your Gui. This will keep the Video dislpayed on your Gui all the time.
; =========================================================================================================
Func _Video_Open($sFile, $hWnd, $iX, $iY, $iH, $iW, $sDevice = "")
    Local $sVID, $gId, $iRet, $sDT = ""
    If Not FileExists($sFile) Then Return SetError(1, 0, "")
    If Not IsHWnd($hWnd) Then Return SetError(2, 0, "")
    If $sDevice <> "" Then
        If Not _mciDeviceExists($sDevice) Then Return SetError(3, 0, "")
        $sDT = " type " & $sDevice
    EndIf
    $gId = Dec(StringTrimLeft($hWnd, 2))
    $sVID = _RandomStr()
    $iRet = _mciSendString("open " & FileGetShortName($sFile) & " alias " & $sVID & $sDT)
    If $iRet <> 0 Then Return SetError(4, 0, "")
    $iRet = _mciSendString("window " & $sVID & " handle " & $gId)
    If $iRet <> 0 Then
        _mciSendString("close " & $sVID)
        Return SetError(5, 0, "")
    EndIf
    $iRet = _mciSendString("put " & $sVID & " destination at " & $iX & " " & $iY & " " & $iH & " " & $iW)
    If $iRet <> 0 Then
        _mciSendString("close " & $sVID)
        Return SetError(6, 0, "")
    EndIf
    Return SetError(0, 0, $sVID)
EndFunc   ;==>_Video_Open

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Pause
; Description....: Pause a Video at the current playing position.
; Syntax.........: _Video_Pause($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = Failed to pause video.
; Author ........: smashly
; =========================================================================================================
Func _Video_Pause($sAlias)
    Local $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    $iRet = _mciSendString("pause " & $sAlias)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Pause

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Play
; Description....: Plays a Video from the current position.
; Syntax.........: _Video_Play($sAlias[, $iMode = 0])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iMode     - 0 play video on the window or control as specified in _Video_Open
;                             - 1 play video in Fullscreen mode.
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = MCI failed to play video.
; Author ........: smashly
; =========================================================================================================
Func _Video_Play($sAlias, $iMode = 0)
    Local $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If _Video_TimePos($sAlias, 1) = _Video_Length($sAlias, 1) Then _Video_Seek($sAlias, "start")
    If $iMode Then
        $vRet = _mciSendString("play " & $sAlias & " fullscreen")
    Else
        $iRet = _mciSendString("play " & $sAlias)
    EndIf
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(1, 0, 0)
    EndIf
EndFunc   ;==>_Video_Play

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Resume
; Description....: Resume playing a video after pausing.
; Syntax.........: _Video_Resume($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = MCI failed to resume video.
; Author ........: smashly
; =========================================================================================================
Func _Video_Resume($sAlias)
    Local $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    $iRet = _mciSendString("resume " & $sAlias)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Resume

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Seek
; Description....: Seek a video to the specified time position.
; Syntax.........: _Video_Seek($sAlias, $iTime)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iTime     - Time to Seek. Can be Millisecons or HH:MM:SS or "start" or "end"
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~3
;                               @error 1 = Invalid Alias
;                               @error 2 = Invalid time format.
;                               @error 3 = MCI Seek error
; Author ........: smashly
; =========================================================================================================
Func _Video_Seek($sAlias, $iTime)
    Local $iMS, $aTime, $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If StringInStr($iTime, ":") Then
        $aTime = StringSplit($iTime, ":")
        If $aTime[0] <> 3 Then Return SetError(2, 0, 0)
        $iMS = 1000 * ((3600 * $aTime[1]) + (60 * $aTime[2]) + $aTime[3])
    ElseIf StringIsInt($iTime) Or $iTime = "start" Or $iTime = "end" Then
        $iMS = $iTime
    Else
        Return SetError(2, 0, 0)
    EndIf
    _mciSendString("set " & $sAlias & " time format ms")
    $iRet = _mciSendString("seek " & $sAlias & " to " & $iMS)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(3, 0, 0)
    EndIf
EndFunc   ;==>_Video_Seek

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Status
; Description....: Get a status status message from a video device.
; Syntax.........: _Video_Status($sAlias[, $sQuery = "mode"])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open
;                  $sQuery    - What to get the status of:
;                               "audio" - returns the "on" or "off"
;                               "mode"  - returns "paused", "playing" and "stopped"
; Return values .: Success    - Returns a Status message from the video device.
;                  Failure    - Return 0 and @error 1
;                               @error 1 = Invalid Alias
;                               @error 2 = Invalid query (To be implemented)
; Author ........: smashly
; =========================================================================================================
Func _Video_Status($sAlias, $sQuery = "mode")
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    ;; error check for the $sQuery goes here
    Return _mciSendString("status " & $sAlias & " " & $sQuery, 255)
EndFunc   ;==>_Video_Status

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Step
; Description....: Step a video forwards or backwards by a number of frames.
; Syntax.........: _Video_Step($sAlias, $iFrames)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open
;                  $iFrames   - The number of frames to step, use negative numbers to step backwards.
; Return values .: Success    - Returns 1 and @error 0
;                  Failure    - Return 0 and @error 1~3
;                               @error 1 = Invalid Alias
;                               @error 2 = Invalid frames
;                               @error 3 = MCI Step error
; Author ........: smashly
; =========================================================================================================
Func _Video_Step($sAlias, $iFrames)
    Local $iRet
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If StringRegExp(StringReplace($iFrames, "-", ""), '\D', 0) Then Return SetError(2, 0, 0)
    $iRet = _mciSendString("step " & $sAlias & " by " & $iFrames)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(3, 0, 0)
    EndIf
EndFunc   ;==>_Video_Step

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Stop
; Description....: Stop a Video playing. (seeks video to start)
; Syntax.........: _Video_Stop($sAlias)
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = Failed to stop or seek
; Author ........: smashly
;==========================================================================================================
Func _Video_Stop($sAlias)
    Local $iRet, $iRet2
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    $iRet = _Video_Seek($sAlias, "start")
    $iRet2 = _mciSendString("stop " & $sAlias)
    If $iRet = 0 And $iRet2 = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(2, 0, 0)
    EndIf
EndFunc   ;==>_Video_Stop

; #FUNCTION# ==============================================================================================
; Name...........: _Video_TimePos
; Description....: Get the time poition of a video in Milliseconds or Hours, Minutes, Seconds (HH:MM:SS)
; Syntax.........: _Video_TimePos($sAlias[, $iTime = 0])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iTime     - 0 Return time lenth in Hours, Minutes, Seconds (HH:MM:SS)
;                             - 1 Return time lenth in Milliseconds.
; Return values .: Success    - Return time position in Milliseconds or Hours, Minutes, Seconds (HH:MM:SS)
;                  Failure    - Return 0 and @error 1
;                               @error 1 = Invalid Alias
; Author ........: smashly
; =========================================================================================================
Func _Video_TimePos($sAlias, $iTime = 0)
    Local $iMS
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    _mciSendString("set " & $sAlias & " time format ms")
    $iMS = _mciSendString("status " & $sAlias & " position", 255)
    If Not $iTime Then Return _MSToHMS($iMS)
    If $iTime Then Return $iMS
EndFunc   ;==>_Video_TimePos

; #FUNCTION# ==============================================================================================
; Name...........: _Video_Volume
; Description....: Turn the video audio volume up or down.
; Syntax.........: _Video_AudioVolume($sAlias[, $iVolume = 100])
; Parameters ....: $sAlias    - Alias name returned by _Video_Open.
;                  $iVolume   - 0 = Min, 100 = Max
; Return values .: Success    - Return 1 and @error 0
;                  Failure    - Return 0 and @error 1~2
;                               @error 1 = Invalid Alias
;                               @error 2 = Invalid Volume
;                               @error 3 = MCI failed to set volume
; Author ........: smashly
; =========================================================================================================
Func _Video_Volume($sAlias, $iVolume = 100)
    Local $iRet, $iVol
    If $sAlias = "" Or StringRegExp($sAlias, "\W|_", 0) Then Return SetError(1, 0, 0)
    If StringRegExp($iVolume, '\D', 0) Then Return SetError(2, 0, 0)
    If $iVolume >= 100 Then
        $iVol = 1000
    ElseIf $iVolume <= 0 Then
        $iVol = 0
    ElseIf $iVolume > 0 And $iVolume < 100 Then
        $iVol = $iVolume * 10
    EndIf
    $iRet = _mciSendString("setaudio " & $sAlias & " volume to " & $iVol)
    If $iRet = 0 Then
        Return SetError(0, 0, 1)
    Else
        Return SetError(3, 0, 0)
    EndIf
EndFunc   ;==>_Video_Volume

;==========================================================================================================
; Internal use functions beyond this point
;==========================================================================================================

; #FUNCTION# ==============================================================================================
; Name...........: _MSToHMS
; Description....: Converts Milliseconds to Hours, Minutes, Seconds
; Syntax.........: _MSToHMS($iMS)
; Parameters ....: $iMS       - Milliseconds to convert
; Return values .: Success    - Returns Hours, Minutes, Seconds (HH:MM:SS)
; Author ........: smashly
; =========================================================================================================
Func _MSToHMS($iMS)
    Local $iHours = 0, $iMins = 0, $iSecs = 0
    If Number($iMS) > 0 Then
        $iMS = Round($iMS / 1000)
        $iHours = Int($iMS / 3600)
        $iTicks = Mod($iMS, 3600)
        $iMins = Int($iMS / 60)
        $iSecs = Round(Mod($iMS, 60))
        Return StringFormat("%02i:%02i:%02i", $iHours, $iMins, $iSecs)
    EndIf
    Return StringFormat("%02i:%02i:%02i", $iHours, $iMins, $iSecs)
EndFunc   ;==>_MSToHMS

; #FUNCTION# ==============================================================================================
; Name...........: _RandomStr
; Description....: Creates a random string
; Syntax.........: _RandomStr([$iLen = 10])
; Parameters ....: $iLen      - Length of string to return
; Return values .: Success    - Returns a string of random letters (a~z)
; Author ........: RazerM
; =========================================================================================================
Func _RandomStr($iLen = 10)
    Local $sTmp = ''
    For $i = 1 To $iLen
        $sTmp &= Chr(Random(97, 122, 1))
    Next
    Return $sTmp
EndFunc   ;==>_RandomStr

; #FUNCTION# ==============================================================================================
; Name...........: _mciDeviceExists
; Description....: Check if a MCI Device type exists
; Syntax.........: _mciDeviceExists($sDevice)
; Parameters ....: $sDevice   - Name of MCI Device type to check for
; Return values .: Success    - Return 1 if MCI Device type exists and @error 0
;                  Failure    - Return 0 if MCI Device type does not exist and @error 1~2
;                               @error 1 = No matching MCI Device type found.
;                               @error 2 = Failed to list any MCI Device types
; Author ........: smashly
; =========================================================================================================
Func _mciDeviceExists($sDevice)
    Local $aDT = _mciListDevices()
    If @error Then Return SetError(2, 0, 0)
    For $idx = 1 To $aDT[0]
        If $sDevice = $aDT[$idx] Then Return SetError(0, 0, 1)
    Next
    Return SetError(1, 0, 0)
EndFunc   ;==>_mciDeviceExists

; #FUNCTION# ==============================================================================================
; Name...........: _mciListDevices
; Description....: List all found MCI Device types in an array
; Syntax.........: _mciListDevices()
; Parameters ....: None
; Return values .: Success    - Return 1D array of found MCI Device types and @error 0
;                               array[0] Number of MCI Device types found
;                               array[n] MCI Device type name
;                  Failure    - Return empty 1D array and @error 1
; Author ........: smashly
; =========================================================================================================
Func _mciListDevices()
    Local $iMD, $sTmp
    $iMD = _mciSendString("sysinfo all quantity", 255)
    If StringIsInt($iMD) Then
        For $idx = 1 To $iMD
            $sTmp &= _mciSendString("sysinfo all name " & $idx, 255) & Chr(0)
        Next
        Return SetError(0, 0, StringSplit(StringTrimRight($sTmp, 1), Chr(0)))
    EndIf
    Return SetError(1, 0, StringSplit($sTmp, Chr(0)))
EndFunc   ;==>_mciListDevices

; #FUNCTION# ==============================================================================================
; Name...........: _mciSendString
; Description....:
; Syntax.........: _mciSendString($string[, $iLen = 0])
; Parameters ....: $string
;                  $iLen
; Return values .:
; Author ........: RazerM
; =========================================================================================================
Func _mciSendString($string, $iLen = 0)
    Local $iRet
    $iRet = DllCall("winmm.dll", "int", "mciSendStringA", "str", $string, "str", "", "long", $iLen, "long", 0)
    If Not @error Then Return $iRet[2]
EndFunc   ;==>_mciSendString

 

Share this post


Link to post
Share on other sites

Olá Belini.

   De acordo com as funções que vc passou seria:

_Video_PLay($sNomeInterno, 1) ; o 2o parâmetro com nro 1 identifica para tocar em tela cheia

 

Share this post


Link to post
Share on other sites

@manimal este parâmetro já uso porém não preenche a tela toda queria esticar o vídeo quando a resolução da tela for diferente da resolução do vídeo.

Share this post


Link to post
Share on other sites

Pois é...

Eu estou usando esta biblioteca em um projeto meu também e percebo certas limitações por causa do MCI nativo do Windows.

Certa vez, disponibilizei a DLL do VLC para ti, comecei a considerar utilizar aquela, mas os exemplos e DLL's  que encontrei na inet foram broxantes.

Tentou alguma vez com a VLC? Chegou a usar? Vale a pena?

Share this post


Link to post
Share on other sites

@manimal não cheguei a usar pois encontrei uma maneira de fazer o que eu precisava usando a UDF video.au3 mesmo, já pesquisei bastante sobre os parâmetros usados em mciSendString() e pelo visto não tem nada prá fazer o vídeo ocupar a tela toda.

 

Share this post


Link to post
Share on other sites
On 13/12/2018 at 11:05 AM, Belini said:

@manimal não cheguei a usar pois encontrei uma maneira de fazer o que eu precisava usando a UDF video.au3 mesmo, já pesquisei bastante sobre os parâmetros usados em mciSendString() e pelo visto não tem nada prá fazer o vídeo ocupar a tela toda.

 

Para ocupar a tela toda é na configuração do codec, já testei aqui quanto tava mexendo, sabe quando você abre o vídeo e la no task bar do windows aparece um icone? Lá vc configura se o vídeo vai esticar ou não. Isso se vc não definir o AspectRatio do vídeo na janela da execução.

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites

Olá Pedro.

   Eu não tenho este ícone no meu Systray, por isso não percebi. Tenho o hábito de desligar os ícones o máximo possível.

   Então o que vc deve estar falando é um dos ícones do CODEC em questão, isso?

   Pode verificar qual é?

   Isso é muito particular do pacote de codecs que vc está usando. Eu pessoalmente prefiro o K-Lite versão BASIC (http://www.codecguide.com/download_kl.htm)

   Mas isso é interessante e obrigado por compartilhar!

Share this post


Link to post
Share on other sites

Boa pergunta.

   Olhei todos aqui e não achei a opção de tela cheia.

   Vamos aguardar o Pedro esclarecer...

Share this post


Link to post
Share on other sites
On 01/01/2019 at 4:22 PM, Belini said:

Em qual configuração do Klite tenho que mexer prá abrir em tela cheia?

Fullscreen que você fala é usando o  _Video_play com o valor 1 na segunda variável para abrir em tela cheia? E ao abrir em tela cheia ele completar as bordas? Eu não me lembro muito bem, muito tempo atrás eu tinha reparado que no windows xp o video não completava a tela, ficava com umas bordas preta, aí testando no windows 10 o video ficava esticado na tela toda. Acredito que mexendo nas configurações do decoder que eu instalei no PC, eu consegui esticar os vídeos no windows xp, aí depois eu nem mexi mais. 

Se não funcionar, tenta criar uma função nova na UDF com o '_mciSendString("put movie window at "...' para reposicionar o vídeo na janela.

 

 

Foi em alguma dessas opões aq \/

3Co9i9e.png

 

 

Editado:

Não tenho certeza, mas pode ser aqui. Aspect Ratio.

image.png.201b8dd42070d6cccf99bb560f981ef8.png

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites
On 07/01/2019 at 8:50 AM, Pedro Pinheiro said:

Se não funcionar, tenta criar uma função nova na UDF com o '_mciSendString("put movie window at "...' para reposicionar o vídeo na janela.

Nas configurações do Klite já mexi prá todo lado e não achei a opção de preenher a tela prá ficar sem as tarjas pretas e comandos prá usar a winmm.dll não achei nenhum que fizesse isto também.

Share this post


Link to post
Share on other sites

Também não achei nada nas configs do K-Lite. Talvez em outro pacote de codecs.

Mas o que o Pedro falou foi uma mudança do Aspect Ratio (AR), que nem todos o players aceitam. Sei que o VLC e o PotPlayer sim, mas duvido que o WMP (padrão MCI) que estamos usando aceite esta brincadeira.

Mais um motivo para migrar para a DLL do VLC.

E mesmo que mude o AR, as barras pretas são inevitáveis por causa da mudança. Se efetivamente preencher a tela toda, a imagem vai provavelmente ficar distorcida!

Share this post


Link to post
Share on other sites
7 hours ago, Manimal said:

Também não achei nada nas configs do K-Lite. Talvez em outro pacote de codecs.

Mas o que o Pedro falou foi uma mudança do Aspect Ratio (AR), que nem todos o players aceitam. Sei que o VLC e o PotPlayer sim, mas duvido que o WMP (padrão MCI) que estamos usando aceite esta brincadeira.

Mais um motivo para migrar para a DLL do VLC.

E mesmo que mude o AR, as barras pretas são inevitáveis por causa da mudança. Se efetivamente preencher a tela toda, a imagem vai provavelmente ficar distorcida!

Como você usa o VLC, criando um objeto no form e exigindo que o programa esteja instalado no PC, ou usando só a DLL dele diretamente sem a necessidade de instalar nada externo? 

Share this post


Link to post
Share on other sites

Por hora deixei de lado esta parte do vídeo pois já perdi muito tempo nisto depois volto a tentar estou agora tentando finalizar meu novo sistema 2x1

 

 

 

Share this post


Link to post
Share on other sites

@Pedro Pinheiro

A ideia é usar a DLL do VLC direto, sem precisar instalar nada, mas parece que o suporte a esta DLL ficou velho, mas teoricamente funciona

Segue os links

https://www.autoitscript.com/forum/topic/114143-vlc-media-player-udf/

e

https://www.autoitscript.com/forum/topic/91316-vlc-media-player/

@Belini Está ficando legal né?

Share this post


Link to post
Share on other sites

Pessoalmente fiz apenas alguns testes pequenos e fiquei na MCI mesmo.

Agora que vou lançar a versão definitiva do Scriba, me sobra tempo para pesquisar a VLC e decidir se vale ou não a pena migrar!

Share this post


Link to post
Share on other sites

@manimal se conseguir alguma coisa que resolva este problema da tela cheia usando a dll do VLC eu também estou disposto a pesquisar, fazer mais testes e migrar prá ela também pois usando a winmm.dll  já ví que não tem como fazer.

Share this post


Link to post
Share on other sites

Buenas...

   Estive tentando trabalhar com a LIB do VLC que está disponível nas bibliotecas do AutoIt e cheguei a seguinte conclusão:

   Existem dois modelos de trabalho: via objeto COM e via ActiveX. O modelo COM era implementado por uma versão mais antiga da VLC e não está mais disponível. O modelo ActiveX em teoria ainda funciona porém está fadado à morte visto que o ActiveX não é mais utilizado, além da necessidade de abrir um browser para funcionar.

   Consegui um terceiro modelo, através de acesso direto à DLL do VLC, porém no meu caso já não serve visto que aumenta consideravelmente o tamanho do download do meu programa, tornando-o inútil para meu público. E mesmo assim, é complicado para fazer funcionar e sinceramente, não consegui fazer tudo o que eu queria.

   Eu achei que poderia haver um processo mais simples mas as funções disponíveis são extremamente avançadas que chega a ser ridículo ter que usar várias funções para executar uma coisa simples. Sem falar que alguns casos que eu nem sei quais funções devo executar e outras onde a documentação da função reconhece que a mesma está bugada...

   Testei também um quarto tipo, passando parâmetros através de linha de comando do VLC, porém alguns parâmetros básicos como largura e altura da janela não funcionam. Bug reconhecido e identificado faz muito tempo e mesmo depois de várias versões, não consertam, portanto é inútil.

   Estou praticamente desistindo de usar a VLC e vou testar o modelo WMP (Windows Media Player). Pessoalmente não gosto (prefiro o VLC), mas fazer o quê?

   Se mais alguém conseguiu trabalhar com a VLC ou tem outra forma de fazê-lo, por favor se manifeste.

Share this post


Link to post
Share on other sites

Eu até tentei usar a dll do vlc, porem os resultados não foram bons e esta dll tem muitos bugs.. já no caso do winmm não sei no w10 mas no w7 que é o que uso é uma dll limitada no quesito "videos". quando tiver um tempo de sobra testo outras dlls.

Share this post


Link to post
Share on other sites

Achei bem interessante essa UDF do DirectShow. Praticamente faz tudo que eu preciso EXCETO mudar a velocidade do vídeo (para mais ou para menos).

Dá para considerar usar.

Mas tu dissestes que tem bugs? Só tela cheia ou específico aos arquivos CDG?

Share this post


Link to post
Share on other sites

Tela cheia funciona perfeito mas com cdg não abre na tela do programa onde deveria abrir e ao invés disto abre numa janela com o nome active Movie Window.

Spoiler

imagem.JPG

Neste exemplo era prá ter aberto o mesmo vídeo nas duas Guis do script e não abriu.

Share this post


Link to post
Share on other sites
On 10/04/2019 at 12:03 PM, Belini said:

Tela cheia funciona perfeito mas com cdg não abre na tela do programa onde deveria abrir e ao invés disto abre numa janela com o nome active Movie Window.

  Hide contents

imagem.JPG

Neste exemplo era prá ter aberto o mesmo vídeo nas duas Guis do script e não abriu.

Você definiu o nome de cada GUI na função de carregar o enginer? Aqui funcionou normal, mas não tentei com .cdg. Esse negocio de reproduzir video no WinXP é chato mesmo. Até os desenvolvedores da biblioteca que eu usava no python retiraram a parte responsável por reproduzir vídeo por causa da incompatibilidade, mas basicamente quem possibilita a reprodução de vídeo são os codecs, lá você define a qualidade do audio, qualidade do vídeo, comportamento dele, aspectratio. Aliás. A biblioteca Sound é tipo aquela UDF de vídeo, praticamente igual, tenta aí reproduzir um .mp4 nela, vai abrir esse active Movie Window, acontece isso porque não foi definido a janela da reprodução, aí ele abriu uma própria lá definida pelo sistema. Essa UDF Dsenginer que vem com uma DLL é o esquema de reprodução que usa directshow. Só você procurar no forum gringo que acha algo relacionado com directshow, deve ta tudo desatualizada, aí só você atualizar ela para a versão do autoit que você usa que fica de boa, aí você não vai precisar mais usar a DSEnginer.dll para gerenciar o vídeo e terá o código aberto para você mexer quando quiser...Claro que se você não estiver satisfeito com o winmm.dll do windows (mciSendString).

 

Sobre o sistema de karaoke. O da Raff trabalha com separação de canais de áudio do arquivo .MID.  No mid você pode trabalhar da forma que quiser, tipo..mudar TOM, velocidade, instrumentos, definir volume para cada canal, silenciar voz, colocar 2 canais de voz, enquanto na tela aparece a letra da música com um background de paisagem.  Lembrando que mudar tom de mp3, mp4, avi, já é mais complicado.

 

 

Ps. O VLC instalado no computador é necessário para que seja reproduzido o vídeo na sua janela, a UDF dele cria um objeto (VLC Player) na sua janela e manipula ele. Esse negocio de dependência é chato, que nem aquela UDF do windows media player, necessita de Internet Explorer instalado e windows media player instalado, alem necessitar de Codec para reproduzir vídeos.

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites
1 hour ago, Pedro Pinheiro said:

tenta aí reproduzir um .mp4 nela, vai abrir esse active Movie Window, acontece isso porque não foi definido a janela da reprodução

Qualquer outro formato fica normal na Gui do script, apenas com .cdg é que abre a janela active Movie Window.

1 hour ago, Pedro Pinheiro said:

Só você procurar no forum gringo que acha algo relacionado com directshow, deve ta tudo desatualizada, aí só você atualizar ela para a versão do autoit que você usa que fica de boa, aí você não vai precisar mais usar a DSEnginer.dll para gerenciar o vídeo e terá o código aberto para você mexer quando quise

Não usar a dll seria o ideal mesmo mas tentei usar o directShow sem ela e não consegui fazer o vídeo abrir em tela cheia como preciso.

#include <DSEngine.au3>
#include <WindowsConstants.au3>

$comp = @DesktopWidth / 2
$alt = @DesktopHeight / 2
$file = @ScriptDir & "\03205.mp4"
;$file = @ScriptDir & "\Almir Sater - Cabecinha No Ombro.cdg"

;========================================= 1º Video
$hWnd = GUICreate("TEST 1", $comp, $alt, 0, 0, $WS_CLIPCHILDREN)
GUISetState(@SW_SHOW, $hWnd)

Engine_Startup(0, @ScriptDir & "\DSEngine_UDF.dll")
Engine_LoadFile(0, $file, $hWnd)
;========================================= 1º Video

;========================================= 2º Video
$hWnd2 = GUICreate("TEST 2", $comp, $alt, $comp, 0, $WS_CLIPCHILDREN)
GUISetState(@SW_SHOW, $hWnd2)

Engine_Startup(1, @ScriptDir & "\DSEngine_UDF.dll")
Engine_LoadFile(1, $file, $hWnd2)
;========================================= 2º Video

Engine_StartPlayback(0)
Engine_StartPlayback(1)
Engine_MaintainAspectRatio(1, false); coloca o 2º vídeo em fullscreen

Do
Until GUIGetMsg() = -3
Engine_Shutdown(0)
Engine_Shutdown(1)
Exit

Script + arquivos .mp4 e .cdg ==>  https://mega.nz/#!ZMFwjIhA!ziar5G2QPiKy401sG2sraLllvEKGz17UfQeOsBjZtWQ

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×