FFMpeg gerou m3u8 segmentado longo atraso de vídeos antes de iniciar a reprodução

1

Estou usando o ffmpeg para gerar uma lista segmentada de arquivos para transmiti-los para um aplicativo iOS. A lista de arquivos é gerada bem, mas quando chega a hora de reproduzi-los, o vídeo precisa ser baixado na íntegra antes de iniciar a reprodução. Esse comportamento parece ser o caso no iOS, Safari e VLC.

Alguém sabe por que isso está acontecendo e como posso melhorar o desempenho da reprodução? Eu tenho controle total sobre como os arquivos são gravados no iOS, bem como como eles são processados. Aqui está um fluxo de amostra:

link

Aqui estão meus comandos ffmpeg para gerar os segmentos do arquivo:

ffmpeg -i joined.ts -flags -global_header -vcodec copy -acodec copy -map 0 -f segment -segment_time 2 -segment_list hls.m3u8 -segment_list_size 999999 -segment_format mpegts out%03d.ts

Aqui está a saída do ffprobe no arquivo:

  libavutil      54.  7.100 / 54.  7.100
  libavcodec     56.  1.100 / 56.  1.100
  libavformat    56.  4.101 / 56.  4.101
  libavdevice    56.  0.100 / 56.  0.100
  libavfilter     5.  1.100 /  5.  1.100
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  0.100 /  3.  0.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  0.100 / 53.  0.100
Input #0, mpegts, from 'joined.ts':
  Duration: 00:00:07.96, start: 1.441667, bitrate: 3899 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1280x720, 24 fps, 24 tbr, 90k tbn, 180k tbc
    Stream #0:1[0x101](und): Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 222 kb/s
    
por Michael Gaylord 20.11.2014 / 22:57

1 resposta

0

Para ter streaming de vídeo de alto desempenho, é necessário que haja um conjunto de vários fluxos de vídeo variantes. Em outras palavras, vídeos codificados em várias taxas de bits e resoluções, que são todas referenciadas a partir de um arquivo de lista de reprodução (.m3u8)

Os players de vídeo que suportam fluxos de taxa de bits adaptável escolherão um fluxo que corresponda à sua conexão de rede e poderão alternar fluxos perfeitamente conforme as condições da rede mudarem. A razão pela qual o vídeo que eu estava tentando transmitir estava demorando tanto para começar a tocar foi porque eu tinha apenas um stream na resolução de 720p, então o player demorou muito para fazer buffer antes de começar a tocar.

Eu usei o padrão Http Live Streaming (HLS) criado pela Apple para gerar um fluxo de taxa de bits adaptável com 5 fluxos (que Eu gerava usando ffmpeg) e meu vídeo começa a tocar quase imediatamente.

Plug sem vergonha: Para tornar isso mais simples para desenvolvedores e outras pessoas, empacotei a infraestrutura que criamos para gerar fluxos HLS, com um SDK do iOS que você pode conferir aqui: < href="https://github.com/Storie/StorieCloudSDK"> link

    
por 04.07.2016 / 17:03