Jump to content
Belini

UDF para rodar vídeos

Recommended Posts

15 hours ago, Belini said:

@pedro pinheiro com  este DirectShow_Player vc conseguiu abrir vídeos de resoluções diferentes em tela cheia sem tarjas pretas?

Não sei, quem define isso é o aspect ratio nas configurações do codec. 4:3, 16:9. Se não conseguir, faça uma GUI  versão fullscreen. Olha aí o exemplo que eu modifiquei para exibir o vídeo em tela cheia. "F" ou "ALT+ENTER"  coloca em tela cheia.

 

DirectShow.au3

InterfaceCall.au3

 

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include "DirectShow.au3"

    $hGui = GUICreate("DirectShow Example",600,420,-1,-1,$WS_CAPTION +  $WS_SYSMENU+ $WS_MINIMIZEBOX + $WS_MAXIMIZEBOX + $WS_SIZEBOX)


    $Run = GUICtrlCreateButton("Run",10,350,100,50)
    GUICtrlSetResizing ( -1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)


    $Pause = GUICtrlCreateButton("Pause",120,350,100,50)
    GUICtrlSetResizing ( -1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)

    $Stop = GUICtrlCreateButton("Stop",230,350,100,50)
    GUICtrlSetResizing ( -1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)

    $FileOpen = GUICtrlCreateButton("FileOpen ",340,350,100,50)
    GUICtrlSetResizing ( -1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)

    $Full = GUICtrlCreateButton("Fullscreen (F)",450,350,100,50)
    GUICtrlSetState(-1,$GUI_DISABLE )
    GUICtrlSetResizing ( -1, $GUI_DOCKHCENTER + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)


    $iBar = GUICtrlCreateLabel("",0,323,465,24)
    GUICtrlSetResizing ( -1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)
    GUICtrlSetFont(-1,18,0,0,"arial")
    GUICtrlSetColor(-1,0xffffff)
    GUICtrlSetbkColor(-1,0)
;~  GUICtrlSetState(-1,$GUI_DISABLE )

    $CSize = GUICtrlCreateButton("\/",570,325,20,20)
    GUICtrlSetResizing ( -1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)

    $CFull = GUICtrlCreateButton("FULLSCREEN",480,325,80,20)
    GUICtrlSetResizing ( -1,$GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT + $GUI_DOCKBOTTOM)



    Local $GenericFull= False
    Local $fullscreen = False
    Local $EsconderB  = False

    Global $IGraphBuilder
    GUISetState()
    GUIRegisterMsg($WM_SIZE, "WM_SIZE")
    While True
        $iMsg = GUIGetMsg()
        Select
            Case $iMsg = $CFull
                $GenericFull = Not $GenericFull
                if $GenericFull Then

                    if $EsconderB then _hideButtons($EsconderB)
                    GUICtrlSetData($CFull,"WINDOW")
                    GuiSetStyle($WS_POPUP,-1,$hGui)
                    GUISetState(@SW_MAXIMIZE,$hGui)
;~                  _hideButtons($EsconderB)
                Else
                    if $EsconderB then _hideButtons($EsconderB)
                    GUICtrlSetData($CFull,"FULLSCREEN")
                    GUISetState(@SW_RESTORE,$hGui)
                    GuiSetStyle( $WS_CAPTION +  $WS_SYSMENU+ $WS_MINIMIZEBOX + $WS_MAXIMIZEBOX + $WS_SIZEBOX,-1,$hGui)
;~                  _hideButtons($EsconderB)
                EndIf

            Case $iMsg = $GUI_EVENT_CLOSE
                Exit

            Case $iMsg = $CSize
                _hideButtons($EsconderB)

            Case $iMsg = $Run
                IMediaControl_Run($IGraphBuilder)

            Case $iMsg = $Pause
                IMediaControl_Pause($IGraphBuilder)

            Case $iMsg = $Stop
                IMediaControl_Stop($IGraphBuilder)

            Case $iMsg = $Full
                $fullscreen = Not $fullscreen
                Local $status = ($fullscreen)? IVideoWindow_put_FullScreenMode($IGraphBuilder,-1) : IVideoWindow_put_FullScreenMode($IGraphBuilder,0)

            Case $iMsg = $FileOpen
                $var = FileOpenDialog("", Default, _
                "Video(*.avi;*.qt;*.mov;*.mpg;*.mpeg;*.m1v;*.wmv;*.flv;*.mp4)|Images(*.gif;*.jpg;*.bmp)|All(*.*)", 1 + 4)
                if Not @error Then
                    if Not ($IGraphBuilder) Then
                        Local $iPosGet = WinGetClientSize($hGui,"")
                        $IGraphBuilder = GUICtrlCreateGraph($hGui,$var,0,0,$iPosGet[0],$iPosGet[1]-100)
                        GUICtrlSetData($iBar,$var)
                    Else
                        Re_GUICtrlCreateGraph($IGraphBuilder,$var) ;ByRef $IGraphBuilder
                    EndIf
                EndIf

            Case  (_IsPressed("12") and _IsPressed("0D")) or _IsPressed("46")
                $fullscreen = Not $fullscreen

                Local $status = ($fullscreen)? IVideoWindow_put_FullScreenMode($IGraphBuilder,-1) : IVideoWindow_put_FullScreenMode($IGraphBuilder,0)
                Sleep(300)

        EndSelect
    WEnd

Func _hideButtons(ByRef $Check)
    $Check = Not $Check
    Local $iSpace = ($GenericFull)? 100:45
    Local $Size = ($GenericFull)? 55:75
    Local $iPosGet = WinGetClientSize($hGui,"")
    if $Check Then
        GUICtrlSetData($CSize,"/\")
        For $i=0 To $Size
            $iD = ControlGetPos($hGui,"",$Run)
            ControlMove($hGui,"",$Run,     $iD[0],$iD[1] + 1)

            $iD = ControlGetPos($hGui,"",$Pause)
            ControlMove($hGui,"",$Pause,     $iD[0],$iD[1] + 1)

            $iD = ControlGetPos($hGui,"",$Stop)
            ControlMove($hGui,"",$Stop,     $iD[0],$iD[1] + 1)

            $iD = ControlGetPos($hGui,"",$FileOpen)
            ControlMove($hGui,"",$FileOpen,     $iD[0],$iD[1] + 1)

            $iD = ControlGetPos($hGui,"",$Full)
            ControlMove($hGui,"",$Full,     $iD[0],$iD[1] + 1)

            $iD = ControlGetPos($hGui,"",$iBar)
            ControlMove($hGui,"",$iBar,     $iD[0],$iD[1] + 1)

            $iD = ControlGetPos($hGui,"",$CSize)
            ControlMove($hGui,"",$CSize,     $iD[0],$iD[1] + 1)

            $iD = ControlGetPos($hGui,"",$CFull)
            ControlMove($hGui,"",$CFull,     $iD[0],$iD[1] + 1)

            IVideoWindow_SetWindowPosition($IGraphBuilder, 0, 0, $iPosGet[0],$iPosGet[1]-100 + $i + $iSpace)
;~          Sleep(10)
        Next
    Else
        GUICtrlSetData($CSize,"\/")
        For $i=$Size To 0 Step -1
            $iD = ControlGetPos($hGui,"",$Run)
            ControlMove($hGui,"",$Run,     $iD[0],$iD[1] - 1)

            $iD = ControlGetPos($hGui,"",$Pause)
            ControlMove($hGui,"",$Pause,     $iD[0],$iD[1] - 1)

            $iD = ControlGetPos($hGui,"",$Stop)
            ControlMove($hGui,"",$Stop,     $iD[0],$iD[1] - 1)

            $iD = ControlGetPos($hGui,"",$FileOpen)
            ControlMove($hGui,"",$FileOpen,     $iD[0],$iD[1] - 1)

            $iD = ControlGetPos($hGui,"",$Full)
            ControlMove($hGui,"",$Full,     $iD[0],$iD[1] - 1)

            $iD = ControlGetPos($hGui,"",$iBar)
            ControlMove($hGui,"",$iBar,     $iD[0],$iD[1] - 1)

            $iD = ControlGetPos($hGui,"",$CSize)
            ControlMove($hGui,"",$CSize,     $iD[0],$iD[1] - 1)

            $iD = ControlGetPos($hGui,"",$CFull)
            ControlMove($hGui,"",$CFull,     $iD[0],$iD[1] - 1)


            IVideoWindow_SetWindowPosition($IGraphBuilder, 0, 0, $iPosGet[0],$iPosGet[1]-100 + $i + $iSpace)
;~          Sleep(10)
        Next
    EndIf

EndFunc

Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $wParam
    Local $iPosGet = WinGetClientSize($hGui,"")
    IVideoWindow_SetWindowPosition($IGraphBuilder, 0, 0, $iPosGet[0],$iPosGet[1]-100)

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE

 

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites

@Pedro Pinheiro neste que vc postou também ficaram tarjas pretas, o único que ví até hj que abre na tela toda sem tarjas foi um exemplo postado pelo @monoceres  só que ele depende da DSEngine_UDF.dll prá isto e lembro que tive problemas na época usando esta dll, queria mesmo era fazer com DirectShow sem depender desta dll

 

 

Share this post


Link to post
Share on other sites
19 minutes ago, Belini said:

@Pedro Pinheiro neste que vc postou também ficaram tarjas pretas, o único que ví até hj que abre na tela toda sem tarjas foi um exemplo postado pelo @monoceres  só que ele depende da DSEngine_UDF.dll prá isto e lembro que tive problemas na época usando esta dll, queria mesmo era fazer com DirectShow sem depender desta dll

Exemplo do que abriu em tela cheia

DSEngine Abre tela cheia.rar

O DSEnginer.dll foi feita com o DirectShow, nada que não se pode implementar na UDF.

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites

 

5 minutes ago, Pedro Pinheiro said:

O DSEnginer.dll foi feita com o DirectShow.

@Pedro Pinheiro sei que foi mas ele também usa a DSEngine_UDF.dll e sem ela não consegui expandir o vídeo na tela toda sem tarjas

Mandei o arquivo errado, o exemplo que abre videos de resoluções diferentes em tela cheia é outro, vou postar novamente

 

DSengine_Fullscreen.rar

Share this post


Link to post
Share on other sites
2 hours ago, Belini said:

 

@Pedro Pinheiro sei que foi mas ele também usa a DSEngine_UDF.dll e sem ela não consegui expandir o vídeo na tela toda sem tarjas

Mandei o arquivo errado, o exemplo que abre videos de resoluções diferentes em tela cheia é outro, vou postar novamente

 

DSengine_Fullscreen.rar

Faz uma janela tela cheia e coloca o vídeo nela. Ou da uma estudada nos parâmetros do directshow https://docs.microsoft.com/pt-br/windows/win32/directshow/media-parameters

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites
On 01/11/2019 at 8:58 AM, Belini said:

@Pedro Pinheiro vc sabe como fazer a função MUTE usando este exemplo de directshow que vc postou?

https://mega.nz/#!xXwEDIrZ!KC_bJMp9zvHzs3yrgYkmW6di5gbSIUJcQ2Cgtvf0Mf0

Testai aí, adicionei a opção de  Fullscreen, o sistema de fit não é uma função internet da UDF, e sim uma manipulação de janela.

f = coloca a tela em fullsscreen
g = estica o vídeo (em modo janela)

Share this post


Link to post
Share on other sites

@Pedro Pinheiro ainda continua aparecendo as bordas pretas quando a resolução do vídeo não é igual a resolução do desktop e pelo que andei testando em outros players que abre o vídeo na tela toda sem bordas vai ter é que desativar o aspect ratio dos vídeos pois nos players que tem esta opção abre ocupando toda a tela sem bordas mas no momento o que eu precisava mesmo era incluir a opção MUTE ou VOLUME num script que vc postou pois ele não usa funções de objeto só que testei com todos códigos e não encontrei qual faz o que eu preciso.

parte do código que faz as funções:

;-------IMediaControl Pause Virtual Method Number Is 9;----------------
    $Rt = InterfaceCall($IMediaControl, "long", 9)
    ;-------IMediaControl Pause Virtual Method Number Is 9;----------------
    
    ;-------IMediaControl Mute Virtual Method Number Is ????;----------------
    $Rt = InterfaceCall($IMediaControl, "long", 0)
    ;-------IMediaControl Mute Virtual Method Number Is ????;----------------

 

Preciso incluir MUTE neste script

DirectShow_Ole32.au3

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


×