sesion nocturno modo cerrar ios video-streaming hls

ios - nocturno - Las listas de reproducción de ''EVENTOS'' de HLS no se inician en los jugadores



cerrar sesion twitch android (3)

Tengo listas de reproducción de HLS que se parecen a esto:

#EXTM3U #EXT-X-VERSION:3 #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-TARGETDURATION:10 #EXT-X-ALLOW-CACHE:NO #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence0.ts #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence1.ts #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence2.ts #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence3.ts

Son del tipo EVENT , lo que significa que los fragmentos se agregan a medida que están disponibles, y cuando todos los fragmentos están allí, al final se agrega una etiqueta #EXT-X-ENDLIST .

Entonces, cuando todos los fragmentos se cargan, terminamos con una lista de reproducción que se parece a algo como:

#EXTM3U #EXT-X-VERSION:3 #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-TARGETDURATION:10 #EXT-X-ALLOW-CACHE:NO #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence0.ts #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence1.ts #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence2.ts #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence3.ts #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence4.ts #EXTINF:9.97667, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence5.ts #EXT-X-ENDLIST

Estamos viendo comportamientos extraños en todos nuestros clientes. Si abre la lista de reproducción m3u8 en iOS y Safari cuando se cargue la primera parte (o incluso después de decir, 3 partes), el reproductor comenzará a reproducir el video como debería. De vez en cuando se detendrá y no podrá reanudarse. Más a menudo que no, ni siquiera comenzará a jugar.

Las listas de reproducción completas (es decir, con una etiqueta #EXT-X-ENDLIST ) se reproducen perfectamente. Es justo cuando la lista de reproducción está parcialmente hecha.

Hemos probado una variedad de jugadores: Quicktime, Safari, iOS, VLC, Flowplayer, etc. Todos tienen una variedad de problemas, pero este es el más urgente.

Cualquier información sobre dónde buscar para resolver este problema sería muy apreciada.

Edit: Hemos intentado HLS.js y se reproduce perfectamente. Una experiencia de usuario tan agradable también

Edición 2: para reproducir, recomiendo tener algún tipo de servidor HTTP local (uso python -m SimpleHTTPServer sirve una lista de reproducción arriba. Luego, literalmente, agregue los archivos a la lista de reproducción para simular la carga de archivos, y observe cómo se rompen los jugadores.

Edición 3: Bueno, he construido una herramienta de prueba simple para observar el comportamiento. https://github.com/dbousamra/m3u8-example Ejecute node app.js y luego intente y open http://localhost:3001/playlist.m3u8 en Safari o en el reproductor que desee. Debería jugar bien, ya que es una lista de reproducción completa. **

Sin embargo, si agrega un parámetro de consulta ?start=<some unix timestamp> , simulará la adición de eventos, 1 porción cada 6 segundos, desde esa marca de hora, hasta que se #EXT-X-ENDLIST todas las porciones, en cuyo punto agregará una #EXT-X-ENDLIST Línea #EXT-X-ENDLIST .

URL de ejemplo: http://localhost:3001/playlist.m3u8?start=1460092250872

Edición 5: Lo tengo en Heroku ahora: http://guarded-mesa-71212.herokuapp.com/playlist.m3u8?start=


Esto es lo que pasó:

#EXTM3U #EXT-X-VERSION:6 #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-TARGETDURATION:11 #EXT-X-ALLOW-CACHE:NO #EXT-X-MEDIA-SEQUENCE:0

si devuelve el archivo anterior, safari no solicitará el siguiente archivo, el juego simplemente se detiene.

#EXTM3U #EXT-X-VERSION:6 #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-TARGETDURATION:11 #EXT-X-ALLOW-CACHE:NO #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:9.999367, https://cammy-bucket-staging-sydney.s3.amazonaws.com/9fc1a264af66e8acb04953bc6634fb6e.ts

si devuelve lo anterior, safari solicitará el siguiente archivo en aproximadamente 11/2 segundos, la reproducción no comenzará en este punto.

#EXTM3U #EXT-X-VERSION:6 #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-TARGETDURATION:11 #EXT-X-ALLOW-CACHE:NO #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:9.999367, https://cammy-bucket-staging-sydney.s3.amazonaws.com/9fc1a264af66e8acb04953bc6634fb6e.ts #EXTINF:9.968911, https://cammy-bucket-staging-sydney.s3.amazonaws.com/3e52720b320379de8afc940c3d1b7d34.ts

si regresa lo anterior, el safari comenzará a jugar porque el medio disponible 9.999367 + 9.968911 es excelente que EXT-X-TARGETDURATION, y verá otra solicitud alrededor del 9.999367 + 9.968911 + 11/2, ¡todo se trata de la sincronización!


La etiqueta #EXT-X-DISCONTINUITY se usa para indicar cambios en el formato del archivo, los parámetros de codificación, el número de pistas, etc. Si los segmentos en la lista de reproducción son idénticos con respecto a estas cosas, puede eliminar las etiquetas #EXT-X-DISCONTINUITY de la lista de reproducción, no las necesita.

Algunos clientes pueden no ser compatibles con la versión 6 del protocolo. Parece que no está utilizando ninguna de las características específicas de la versión 6, así que intente configurar el número de versión en 3 para ver si eso ayuda.


prueba algo como esto

Archivo de lista de reproducción de medios simple

#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:5220 #EXTINF:5219.2, http://media.example.com/entire.ts #EXT-X-ENDLIST

Lista de reproducción de medios de ventana deslizante, utilizando HTTPS

#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:2680 #EXTINF:7.975, https://priv.example.com/fileSequence2680.ts #EXTINF:7.941, https://priv.example.com/fileSequence2681.ts #EXTINF:7.975, https://priv.example.com/fileSequence2682.ts

Archivo de lista de reproducción con segmentos de medios encriptados

#EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:7794 #EXT-X-TARGETDURATION:15 #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52" #EXTINF:2.833, http://media.example.com/fileSequence52-A.ts #EXTINF:15.0, http://media.example.com/fileSequence52-B.ts #EXTINF:13.333, http://media.example.com/fileSequence52-C.ts #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53" #EXTINF:15.0, http://media.example.com/fileSequence53-A.ts

Archivo de lista de reproducción principal

#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000 http://example.com/low.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000 http://example.com/mid.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000 http://example.com/hi.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5" http://example.com/audio-only.m3u8

Lista de reproducción maestra con marcos I En este ejemplo, los atributos de ID de programa se han omitido:

#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=1280000 low/audio-video.m3u8 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="low/iframe.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=2560000 mid/audio-video.m3u8 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=150000,URI="mid/iframe.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=7680000 hi/audio-video.m3u8 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=550000,URI="hi/iframe.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5" audio-only.m3u8

Lista de reproducción maestra con audio alternativo En este ejemplo, los atributos de ID de programa se han omitido. Los atributos de CODECS se han condensado para el espacio. Se utiliza un ''/' para indicar que la etiqueta continúa en la siguiente línea con el espacio en blanco eliminado:

#EXTM3U #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="English", / DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en", / URI="main/english-audio.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Deutsch", / DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="de", / URI="main/german-audio.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Commentary", / DEFAULT=NO,AUTOSELECT=NO,URI="commentary/audio-only.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",AUDIO="aac" low/video-only.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",AUDIO="aac" mid/video-only.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",AUDIO="aac" hi/video-only.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5",AUDIO="aac" main/english-audio.m3u8

Master Playlist con video alternativo

#EXTM3U #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Main", / DEFAULT=YES,URI="low/main/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Centerfield", / DEFAULT=NO,URI="low/centerfield/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Dugout", / DEFAULT=NO,URI="low/dugout/audio-video.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",VIDEO="low" low/main/audio-video.m3u8 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Main", / DEFAULT=YES,URI="mid/main/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Centerfield", / DEFAULT=NO,URI="mid/centerfield/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Dugout", / DEFAULT=NO,URI="mid/dugout/audio-video.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",VIDEO="mid" mid/main/audio-video.m3u8 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Main", / DEFAULT=YES,URI="hi/main/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Centerfield", / DEFAULT=NO,URI="hi/centerfield/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Dugout", / DEFAULT=NO,URI="hi/dugout/audio-video.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",VIDEO="hi" hi/main/audio-video.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5" main/audio-only.m3u8