roStreamQueue
Este objeto le permite reproducir una lista de archivos de video sin interrupciones (es decir, sin fotogramas en blanco ni interrupciones entre un video y el siguiente). Puede vincular roStreamQueue a una instancia de roVideoPlayer para la reproducción continua de video o a una instancia de roMediaStreamer para el streaming continuo de video.
Creación de objeto: este objeto se crea sin parámetros.
CreateObject("roStreamQueue")Requisitos de archivos
Los archivos de video deben cumplir los siguientes requisitos para funcionar con el objeto roStreamQueue :
- Los archivos deben tener formato Transport Stream (.ts).
- Todos los archivos en una cola deben tener PID idénticos.
- Los archivos deben comenzar y terminar con un GOP cerrado.
- Los archivos deben tener PCR regulares en intervalos de 100 ms o menos. Tenga en cuenta que el intervalo predeterminado para FFMPEG es de 1000 ms, a menos que esté configurado para multiplexación CBR (en cuyo caso el intervalo se establece en 20 ms). El siguiente es un ejemplo de un comando tp remux apropiado:
avconv -i clip_short.ts -vcodec copy -acodec copy -muxrate 15M clip_short2.tsifStreamQueue
QueueFile(filename As String) As Boolean
Agrega el archivo de video especificado a la cola.
Loop(loop As Boolean) As Boolean
Especifica que la reproducción/el streaming debe volver al comienzo de la cola una vez que llegue al final. Si se llaman tanto Loop(false) como LoopLast(false) , la reproducción/el streaming se detendrá una vez que se alcance el final de la cola. Este también es el comportamiento predeterminado.
LoopLast(loop_last As Boolean) As Boolean
Especifica que la reproducción/el streaming debe repetir el último archivo de la cola una vez que llegue al final. Este método no tiene efecto si también se llama a Loop(true) .
SetPreferredAudio(description As String) As Boolean
Elige un flujo de video de la entrada de video según los parámetros de la cadena pasada.
SetPreferredVideo(description As String) As Boolean
Elige un flujo de audio de la entrada de video según los parámetros de la cadena pasada.
KeepPadding(enabled As Boolean)
Si enabled=true, todos los PID en el flujo de entrada (incluidos los paquetes de relleno) se transfieren a la salida. Esto permite conservar el perfil de flujo de bits CBR al retransmitir a la red. No se puede usar cuando se alimenta un decodificador local.
NextFile(a As Boolean) As Boolean
Start() As Boolean
ifMessagePort
SetPort(port As roMessagePort)
Publica mensajes de tipo roStreamQueueEvent en el puerto de mensajes adjunto. Se genera un evento cada vez que se alcanza el final de la cola.
ifUserData
SetUserData(user_data As Object)
Establece los datos de usuario que se devolverán cuando se generen eventos.
GetUserData() As Object
Devuelve los datos de usuario que se establecieron previamente mediante SetUserData(). Devolverá Invalid si no se han establecido datos.
ifIdentity
GetIdentity() As Integer
Devuelve un número único que se puede usar para identificar cuándo los eventos se originan en este objeto.
La interfaz ifIdentity ha quedado obsoleta. Recomendamos usar la interfaz ifUserData en su lugar.
Colas de reproducción y streaming
Para usar roStreamQueue como una lista de reproducción de streaming, inclúyalo como el componente fuente en una llamada a roMediaStreamer.SetPipeline(). Para la reproducción de video, use una instancia de roVideoPlayer como el componente de destino en la llamada a SetPipeline() .
Ejemplo (roVideoPlayer)
q=createobject("rostreamqueue")
q.queuefile("sd:/Test_Count_Up_Blue_Frames.ts")
q.queuefile("sd:/Test_Count_Up_Green_Frames.ts")
q.loop(true)
c=createobject("romediastreamer")
r=createobject("rorectangle",0,0,1920,1080)
v=createobject("rovideoplayer")
v.setrectangle(r)
c.setpipeline([q, v])
c.start()Ejemplo (roMediaStreamer)
queue = CreateObject("roStreamQueue")
queue.queueFile("file1.ts")
queue.queueFile("file2.ts")
queue.loop(true)
m = CreateObject("roMediaStreamer")
m.setpipeline([queue, "udp://239.0.156.101:5000/?maxbitrate=0"])
m.Start()Sugerimos encarecidamente agregar el parámetro "maxbitrate=0" a los flujos UDP al usar roStreamQueue. Esto evita que la instancia de roMediaStreamer limite la velocidad de un flujo roStreamQueue que ya se está ejecutando a una velocidad precisa y correcta.