Complicações de segmentação de vídeo HLS. Como criar um fluxo de transporte com ffmpeg

2

Tenho vídeos h264 e atualmente estamos usando as ferramentas HTTP Video Streaming da Apple e mediafilesegmenter para segmentar esses arquivos. O que eu preciso fazer é mudar para o segmentador alternativo baseado em este segmentador open-source muito popular

O problema é que esse segmentador não aceita apenas vídeos, mas apenas vídeos MPEG-TS. Então eu tenho que converter meus vídeos h264 para TS primeiro.

Eu posso fazer isso com o ffmpeg. Eu estou usando isso:

ffmpeg -i encoded.mp4 -vcodec h264 -i encoded.mp4 -sameq -acodec aac -strict experimental -f mpegts output.ts  

Mas isso cria uma produção razoavelmente maior. E a razão é que o segmentador da Apple mantém o mesmo codec - AVC e o mesmo codec de áudio - AAC, enquanto o ffmpeg altera o formato de vídeo para MPEG Video.

A pergunta é: posso de alguma forma manter o mesmo codec de vídeo AVC e ainda converter vídeo em um fluxo de transporte?

Portanto, meu objetivo é manter a mesma qualidade de vídeo e os mesmos codecs de vídeo que o segmentador de mídias da Apple faz.

UPD: Ok ... parece que o ffmpeg PODE dividir vídeos em segmentos:

ffmpeg -i encoded.mp4 -c copy -map 0 -vbsf h264_mp4toannexb -f segment -segment_time 10 -segment_list test.m3u8 -segment_format mpegts segment%d.ts

Isso ainda tem um problema: ele não cria um arquivo de índice de transmissão ao vivo http. (-segment_list cria um arquivo com lista de segmentos, mas não se parece com o índice HLS). Então, você ainda tem que criar um arquivo de índice

    
por iLemming 19.06.2012 / 19:09

3 respostas

5

Tente:

ffmpeg -i in.mp4 -acodec copy -vcodec copy out.ts

O Ffmpeg também possui um segmentador. Consulte o link

    
por 20.06.2012 / 03:48
2

Tente definir -segment_list_type como m3u8 . Do jeito que está, a lista é boa para conversão de arquivos estáticos, mas não para transmissões ao vivo, já que a duração do segmento não é adicionada à lista até que close_list seja chamado.

O tipo de lista deve ser definido a partir da extensão de arquivo de nome de lista nas versões atuais, mas não é.

    
por 28.08.2012 / 02:30
2

Tente definir -segment_list_flags live

    
por 06.11.2015 / 09:40