|
Página 1 de 1
|
Algunas Cosas Sobre Gb.media.from?
Autor |
Mensaje |
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Algunas Cosas Sobre Gb.media.from?
buenas,
resulta que usando el componente gb.media.from cargo el vídeo lo reproduce y cuando finaliza pongo play de nuevo y como que no hay vídeo para reproducir.
Sin embargo si apreto stop y después play si reproduce el vídeo anteriormente cargado
mi pregunta es como hago para detectar que el vídeo termino de reproducirse?
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#1 Sabado, 18 Julio 2015, 23:21 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Algunas Cosas Sobre Gb.media.form?
Antes que nada, tenemos que decir que el objeto MediaView es un componente creado en lenguaje gambas, y en particular con las Clases de gambas relativas a el API de GStreamer. Por ahora veo que el objeto MediaView no tiene un recurso para decirnos cuando un archivo audio/video termina de reproducirse.
Pusiste dos problemas.
1) Si el tu problema principal es que querrías simplemente reproducir de nuevo el mismo file video (o audio o Midi), apretando el Button " Play", este el codigo para ti:
2) Si tu quieres saber si/cuando el archivo terminó de reproducirse... esto es más complicado conocerlo.
última edición por vuott el Domingo, 19 Julio 2015, 16:42; editado 5 veces
|
#2 Domingo, 19 Julio 2015, 05:53 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Algunas Cosas Sobre Gb.media.form?
2) Si tu quieres saber si/cuando el archivo terminó de reproducirse... esto es más complicado conocerlo.
...pero tal vez es posible conocerlo... con el ayuda de las funciones externasss.
Private bt As Button
Private da As DrawingArea
Private pl As ToolButton
Private obs As Observer
Private plobs As Observer
Private tempus As Integer
Private dt As Date
Library "libX11:6.3.0"
Private Enum XYBitmap = 0, XYPixmap, ZPixmap
' Display *XOpenDisplay(char *display_name)
' Opens a connection to the X server that controls a display.
Private Extern XOpenDisplay(display$ As String) As Pointer
' unsigned long XAllPlanes()
' Returns a value with all bits set to 1 suitable for use in a plane argument to a procedure.
Private Extern XAllPlanes() As Long
' XImage *XGetImage(Display *display, Drawable d, int x, int y, unsigned int width, unsigned int height, unsigned long plane_mask, int format)
' Returns a pointer to an XImage structure.
Private Extern XGetImage(displayP As Pointer, d As Long, xI As Integer, yI As Integer, wid As Integer, hei As Integer, plane_mask As Long, formatI As Integer) As Pointer
' unsigned long XGetPixel(XImage *ximage, int x, int y)
' Returns the specified pixel from the named image.
Private Extern XGetPixel(ximage As Pointer, xI As Integer, yI As Integer) As Long
' XCloseDisplay(Display *display)
' Closes the connection to the X server for the display specified in the Display structure and destroys all windows.
Private Extern XCloseDisplay(displayP As Pointer)
Public Sub Form_Open()
Dim ob As Object
ob = MediaView1.Children[0]
ob = ob.Children[0]
da = ob.Children[1]
ob = ob.Children[2]
pl = ob.Children[0]
With bt = New Button(ob.Children[3]) As "Abrir"
.X = 10
.Y = 5
.W = 40
.H = 20
.Text = "Abrir"
.Border = Border.None
End With
plobs = New Observer(pl) As "Play"
End
Public Sub Abrir_Click()
With Dialog
If .OpenFile() Then Return
MediaView1.URL = .Path
End With
End
Public Sub Abrir_Enter()
bt.Border = Border.Plain
End
Public Sub Abrir_Leave()
bt.Border = Border.None
End
Public Sub Play_Click()
If dt > 0 Then Return
tempus = 0
obs = New Observer(da) As "DrAr"
dt = Time(Now)
End
Public Sub DrAr_Draw()
Dim dsp As Pointer
Dim XImage As Pointer
dsp = XOpenDisplay(Null)
If IsNull(dsp) Then Error.Raise("Imposible conectarse a el server X !")
XImage = XGetImage(dsp, da.Handle, 0, 0, da.W, da.H, XAllPlanes(), XYPixmap)
If IsNull(XImage) Then Error.Raise("Imposible obtener un 'Puntero' a los datos de la imagen de la 'DrawingArea' !")
If XGetPixel(XImage, (da.W * 50) / 100, 10) <> &D1D1D1 Then
If tempus = 0 Then
tempus = DateDiff(dt, Time, gb.Millisecond) * 2
Else
If DateDiff(dt, Time, gb.Millisecond) >= tempus Then
MediaView1.Stop
dt = 0
Endif
Endif
Endif
XCloseDisplay(dsp)
End
A mi funciona, dime si a ti funciona este codigo.
última edición por vuott el Domingo, 19 Julio 2015, 07:59; editado 7 veces
|
#3 Domingo, 19 Julio 2015, 06:55 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|