---
title: roStreamQueue
slug: develop/es/rostreamqueue
docTags: 
createdAt: 2025-03-11T07:07:18.733Z
---

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.

```text
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:

```text
avconv -i clip_short.ts -vcodec copy -acodec copy -muxrate 15M clip_short2.ts
```

## ifStreamQueue

### 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](docId\:OSZbyfPamAsbWnD6w7JSh) 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](docId\:OSZbyfPamAsbWnD6w7JSh) 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.

:::hint{type="info"}
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)

```text
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)

```text
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()
```

:::hint{type="danger"}
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.
:::

