Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

206
Views
El elemento HTML <track> muestra pistas en la consola pero también longitud = 0 y no se puede acceder a ellas mediante la indexación

Estoy trabajando en una página con un reproductor de video en el que intento mostrar subtítulos vtt y obtener información de las señales en el elemento <track> .

Esto es lo que es relevante para el reproductor en HTML:

 <div class="video"> <video id="vid"> <source src="Video.mp4" type="video/mp4"> <track kind="subtitles" src="Captions.vtt" srclang="en"> </video> </div>

Primero tenía algo como esto en mi JavaScript, solo para ver lo que obtenía antes de manipular cualquier cosa en el código.

 var trackObject = $('track')[0].track; trackObject.mode = 'showing'; console.log('Track cues:'); console.log(trackObject.cues); console.log(trackObject.cues[0]);

El cambio en el atributo de mode se realiza allí porque, si configuro de default el elemento <track> en HTML, el video no aparece en muchos navegadores. Todavía no sé por qué.

Lo que esto imprime a la consola es lo siguiente:

ingrese la descripción de la imagen aquí

Sin embargo, cuando TextTrackCueList , veo las señales:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Esto solo tiene sentido para mí si asumo que las señales se han cargado en el elemento, pero el atributo de length no se ha actualizado. Pero todavía no sé cuál es la longitud que veo al final de la lista, que muestra el número real de pistas.

No he encontrado ningún tipo de evento de carga en la pista de texto, así que esto es lo que hice para asegurarme de que puedo obtener las señales:

 var trackObject = $('track')[0].track; trackObject.mode = 'showing'; var waitForCues = setInterval(function() { if (trackObject.cues.length > 0) { var cueList = getTracks(trackObject) // ...Do some processing with the cues... clearInterval(waitForCues); } }, 40);

¿Por qué sucede esto con el atributo de length del elemento de pista? ¿Cómo puedo deshacerme de eso esperando que la longitud sea mayor que 0?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Como HTMLMediaElement, el elemento <track> admite los mismos eventos de error y load global que cualquier otro HTMLElement, por lo que puede escucharlos para determinar si su VTT está listo para el negocio o no.

 mytrack.addEventListener(`load`, evt => { console.log(`good to go`); const { track } = mytrack; // force this track to become active so we can get the cues: track.mode = "showing"; const { cues } = track; console.log(`${cues.length} cues found`); }); mytrack.addEventListener(`error`, evt => { console.log(`yeah that's a problem`); });
 <video controls> <source src="https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4" type="video/mp4"> <track id="mytrack" kind="captions" src="data:text/plain;charset=utf-8,WEBVTT%0A%0A00%3A00%3A00.500%20--%3E%2000%3A00%3A02.000%0AThe%20Web%20is%20always%20changing%0A%0A00%3A00%3A02.500%20--%3E%2000%3A00%3A04.300%0Aand%20the%20way%20we%20access%20it%20is%20changing" srclang="en" label="English" default="default"> > </video>

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!