Este tópico apresenta respostas para perguntas frequentes sobre o LiveChannel.
Processo de ingestão de stream
O diagrama a seguir ilustra o processo de ingestão de stream do LiveChannel. Compreender esse fluxo auxilia na solução de problemas.
Para obter mais informações, consulte PutLiveChannel e PutLiveChannelStatus.
O que fazer se o objeto M3U8 gerado não contiver todos os dados ingeridos no LiveChannel?
Causa: De acordo com as regras padrão do protocolo HTTP Live Streaming (HLS), o objeto M3U8 gerado contém apenas os três últimos objetos TS.
Solução: Chame a operação PostVodPlaylist para consolidar os objetos TS gerados dentro do intervalo de tempo especificado em um único objeto M3U8.
O parâmetro
EndTimedeve ser posterior aoStartTime, e o intervalo de tempo não pode exceder um dia.O OSS consulta todos os arquivos ts gerados pela ingestão de stream do LiveChannel especificado dentro do intervalo de tempo definido e os reúne em uma playlist.
O que fazer se a geração do objeto M3U8 falhar?
Causa: Os dados da stream não foram totalmente ingeridos no Object Storage Service (OSS).
Solução: Capture pacotes no cliente para verificar se a mensagem "publish success" foi retornada. Essa resposta indica que os dados da stream foram completamente carregados no OSS. Caso a mensagem apareça, mas o objeto M3U8 não seja gerado, analise os pacotes enviados pelo cliente para identificar a causa raiz.
O que fazer se o cliente não conseguir ingerir uma stream no OSS?
Por exemplo, suponha que a ingestão de stream falhe ao usar o FFmpeg com o seguinte comando:
ffmpeg -re -i 0_20180525105430445.aac -acodec aac -strict -2 -f flv rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8
Solução:
Se a ingestão via FFmpeg não funcionar, teste um comando básico sem parâmetros complexos.
Quando a URL de ingestão contiver um e comercial (&), coloque toda a URL entre aspas duplas (""). Exemplo:
ffmpeg -re -i 0_20180525105430445.aac -acodec aac -strict -2 -f flv "rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8".Tente realizar a ingestão com o OBS Studio para confirmar se o problema é específico do FFmpeg.
Para reduzir a alta latência após o início da ingestão, ajuste os parâmetros FragDuration e FragCount da operação PutLiveChannel.
O que fazer se ocorrer travamento durante a reprodução do objeto M3U8 gerado?
No formato de armazenamento HLS, assim que a duração dos dados de áudio e vídeo gravados no arquivo .ts atual atinge o valor definido por FragDuration, o OSS passa para o próximo arquivo .ts ao receber o próximo key frame. Se nenhum key frame chegar dentro de max(2*FragDuration, 60s), o OSS força a troca de arquivo, o que pode causar interrupções na reprodução.
O que fazer se o objeto M3U8 gerado não incluir dados de áudio ou vídeo?
Causa:
O cabeçalho
AVC headerouAAC headerestá ausente. Capture pacotes para verifique essa condição.O tamanho da
RTMP messageé menor que 2 ou osequence headeré muito pequeno.O tamanho da
Messagede áudio excede a capacidade do buffer.O parâmetro
codec_ ctxcontém o contexto de decodificação. Dados de áudio ou vídeo anormais nesse contexto podem causar falha na gravação.
O que fazer se o vídeo carregado no OSS via FFmpeg não contiver dados de áudio?
Solução:
Analise os logs do FFmpeg para confirme se o cliente enviou o
aac_header.Capture pacotes RTMP no cliente para verifique se o
aac_headerfoi transmitido.
Os logs do FFmpeg mostram que a stream de áudio está codificada como aac (LC) com identificador 0x000A, o que confirma o envio do aac_header pelo cliente:
Stream #0:0, 0, 1/1000
: Video: h264 (High), 1 reference frame ([7][0][0][0] / 0x0007), yuv420p(progressive, left), 544x...
18 fps, 18 tbr, 1k tbn,
1k tbc
Stream #0:1, 0, 1/1000: Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, mono, fltp
Stream mapping:
(copy)
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
Last message repeated 2 times