Configure seu codificador de transmissão ao vivo Antes de poder começar a transmitir no YouTube, você precisa baixar o software de codificação. O software de codificação permite que você capture conteúdo, incluindo sua área de trabalho, câmera, microfone e mais, e envie-o para o YouTube Live para serem transmitidos para todos os seus fãs. O melhor software de codificação para você depende das suas necessidades. Nós organizamos uma seleção de encoders abaixo. Dispositivos do YouTube Live Verified O software do amplificador do software Live Verified está integrado com o YouTube Live - basta procurar o logotipo do YouTube no software e fazer login com sua Conta do Google. Seu codificador será configurado automaticamente para uso com o YouTube e você estará pronto para começar a gravar Gravar e transmitir a partir do aplicativo de jogos do YouTube. Espelhe seu dispositivo móvel para o YouTube. Elgato Game Capture HD60 Windows, Mac Grava e transmite sua jogabilidade Xbox, PlayStation ou Wii U. Epiphan Webcaster X1 Qualquer dispositivo HDMI Use o Epiphan Webcaster X1 para transmitir sua câmera HD para o YouTube. Funciona com qualquer câmera, mixer ou dispositivo com saída HDMI. Software de produção profissional focado no jogo. Modelos, capacidades dinâmicas de produção, widgets e muito mais. Wirecast Go iOS (Gratuito com compras no aplicativo) Produza transmissões ao vivo de seu iPhone. Wirecast Play Windows, Mac (versão gratuita disponível) Tudo o que você precisa para transmitir vídeos ao vivo de sua área de trabalho para o mundo. XSplit Broadcaster Windows (versão gratuita disponível) Aplicação de mistura de áudio e vídeo revolucionária que permite que você crie transmissões ao vivo profissionais e gravações de vídeo. XSplit Gamecaster Windows (versão gratuita disponível) A maneira mais fácil de transmitir e gravar seus melhores momentos de jogo com o clique de um botão. Perfeito para compartilhar sua jogabilidade. Os produtos listados acima atendem aos critérios do YouTube Live Verified. Com a exceção da Mobile Capture, nenhum desses produtos é feito pelo Google. Certifique-se de avaliar os produtos e decidir qual opção faz mais sentido para você ou para sua empresa. Outros codificadores Procurando opções de código aberto Tente Open Broadcaster Software. Software livre e de código aberto para gravação de vídeo e transmissão em tempo real. Se você selecionou um codificador que não é Live Verified. Veja como configurá-lo. Transmitir agora Basta copiar o URL do servidor e transmitir a chave de nome no seu codificador. Evento ao vivo Copie os pontos de entrada do YouTube das configurações de ingestão para o seu codificador. Nome do fluxo - Isso identifica seu fluxo em servidores do YouTube. URL do Servidor Principal - O servidor principal onde seu fluxo será ingerido pelo YouTube. URL do Servidor de Backup - O servidor de backup onde seu fluxo será ingerido pelo YouTube. Escolher transmitir o backup é recomendado, mas requer o dobro da largura de banda de saída (você está enviando um fluxo redundante simultâneo). Portanto, certifique-se de que você tenha a capacidade de largura de banda da internet. Idealmente, seu fluxo de backup deve estar em um codificador físico totalmente redundante. Configure seu codificador usando as configurações de codificação recomendadas pela YouTubes. Configure suas fontes de áudio e vídeo. Inicie a codificação. Se você estiver usando um evento agendado, lembre-se de iniciar o evento no YouTube também. Este artigo é útil. O EFPpeg pode, basicamente, transmitir através de uma das duas maneiras: ele é um fluxo para um outro servidor, que re-fluxos para ele para vários clientes, ou pode transmitir via UDPTCP diretamente para algum receptor de destino único ou, alternativamente, diretamente para um Destino multicast. Teoricamente, você poderá enviar para vários receptores através da Criação de Saídas Múltiplas, mas não há um servidor completo cheio. Os servidores que podem receber do FFmpeg (para restream para vários clientes) incluem ffserver (somente Linux, embora com o cygwin possa funcionar no Windows) ou o Wowza Media Server. Ou o Flash Media Server. Red5, ou vários outros. Mesmo o VLC pode pegar o fluxo de ffmpeg, redistribua-o, atuando como um servidor. Uma vez que o FFmpeg é às vezes mais eficiente do que o VLC ao fazer a codificação em bruto, esta pode ser uma opção útil em comparação com a transcodificação e transmissão em VLC. Nginx também possui um plugin de redistribuição de rtmp, assim como o apache, etc., e há provavelmente mais por apache, etc. Você também pode transmitir transmissão em tempo real para servidores de redistribuição online como own3d. tv ou justin. tv (por exemplo, transmitir sua área de trabalho). Além disso, qualquer servidor rtmp provavelmente funcionará para receber fluxos de FFmpeg (estes geralmente exigem que você configure uma instância em execução em um servidor). A bandeira - re O sinalizador FFmpegs - re significa ler a entrada na taxa de quadros nativa. Principalmente utilizado para simular um dispositivo de captura. Ou seja, se você quisesse transmitir um arquivo de vídeo, então você gostaria de usar isso, caso contrário ele pode transmitir-lo muito rápido (ele tenta transmitir a velocidade da linha por padrão). Acho que, normalmente, você não deseja usar esta bandeira ao transmitir de um dispositivo ao vivo, nunca. Heres como um sujeito transmitiu uma transmissão ao vivo (neste caso, um dispositivo de captura de tela CaptureDesktopWindows): com sua pré-configuração personalizada FFmpeg (libx264-myffpreset. ffpreset): Aqui está o que outra pessoa fez uma vez: E aqui está o que outra pessoa fez. Observe que eles também (para diretshow devices) tiveram que ajustar o rtbufsize nesse exemplo. Você pode ver uma descrição do que alguns desses meios, (por exemplo, bufsize, configurações de bitrate) no EncodeH.264. Veja como você transmite para twitch. tv ou serviços similares (protocolo rtmp), usando ffmpeg 1.0 ou ffmpeg-git (testado em 2017-11-12), isso também é para usuários de pulsaudio: Exemplo 1, sem som: Exemplo 2, Primeira tela (na configuração de tela dupla, ou se em uma única tela): Exemplo 3, segunda tela (na configuração de tela dupla): você pode diminuir a latência inicial de inicialização, especificando que I-frames vêm com mais freqüência (ou basicamente sempre , No caso da configuração zerolatência x264 s), embora isso possa aumentar o tamanho do quadro e diminuir a qualidade, veja aqui para obter mais algum plano de fundo. Basicamente para fluxos típicos x264, ele insere um quadro I cada 250 quadros. Isso significa que os novos clientes que se conectam ao fluxo podem ter que esperar até 250 quadros antes que eles possam começar a receber o fluxo (ou começar com dados antigos). Por isso, aumenta a frequência do quadro I (torna o fluxo maior, mas pode diminuir a latência). Para capturas em tempo real, você também pode diminuir a latência do áudio no Windows dshow usando a configuração dshow audiobuffersize. Você também pode diminuir a latência, ajustando qualquer servidor de transmissão que você está usando para minimizar a latência e, finalmente, ajustando o cliente que recebe o fluxo para não armazenar em cache dados recebidos, o que, se isso acontecer, aumenta a latência. Às vezes, os codecs de áudio também apresentam alguma latência própria. Você pode obter menos latência usando speex, por exemplo, ou opus, no lugar do libmp3lame. Você também quer tentar diminuir a latência do lado do servidor, por exemplo, dicas wowza. Também a configuração - processamento e a análise de valores baixos para valores baixos pode ajudar o seu fluxo a inicializar mais rapidamente (ele usa estes para procurar fluxos em determinados muxers, como ts, onde alguns podem aparecer mais tarde, e também para estimar a duração, que, para viver Córregos, o último que você não precisa de qualquer maneira). Isso deve ser desnecessário pela entrada dshow. Reduzir a cache no lado do cliente também pode ajudar, por exemplo, o mplayer possui uma opção de falta, outros jogadores também podem ter algum tipo de buffer de pré-reprodução que está ocorrendo. (A realidade é mplayers - a opção de referência tem muito mais efeito). O uso de um codificador que codifica mais rapidamente (ou possivelmente mesmo um formato bruto) pode reduzir a latência. Você pode obter menos latência usando um dos protocolos ponto a ponto descritos neste documento, bem. Você perdeu o benefício de ter um servidor, é claro. Observe que um cliente quando ele inicialmente inicialmente pode ter que esperar até o próximo i-frame para poder começar a receber o fluxo (ex: se receber UDP), então o intervalo de configuração i-frame (-g) I do GOP terá um Efeito sobre a rapidez com que eles podem começar a transmitir (ou seja, eles devem receber um i-frame antes de começar). Configurá-lo para um número menor significa que ele usará mais largura de banda, mas os clientes poderão se conectar mais rapidamente (o padrão para x264 é 250 - então, para 30 fps, o que significa um quadro i somente uma vez a cada 10 segundos ou mais). Então, é uma compensação se você ajustá-la. Isso não afeta a latência real (apenas tempo de conexão), uma vez que o cliente ainda pode exibir quadros muito rapidamente após e depois recebeu o primeiro i-frame. Além disso, se você estiver usando um transporte com perdas, como o UDP, então um quadro i representa a próxima mudança que terá para reparar o fluxo se houver problemas com a perda de pacotes. Você também pode (se capturar a partir de uma fonte ao vivo) aumentar a taxa de quadros para diminuir a latência (o que afeta a taxa de transferência e também a frequência do quadro i, claro). Isso é óbvio envia pacotes com mais freqüência, então (com 5 fps, você apresenta pelo menos uma latência de 0,2 s, com latência de 10 fps 0,1s), mas também ajuda os clientes a preencher seus buffers internos, etc., mais rapidamente. Observe também que usar dss rtbufsize tem o efeito colateral infeliz de, às vezes, permitir que quadros se amortam enquanto aguarda a codificação de quadros anteriores ou aguarde que sejam enviados por cima do fio. Isso significa que, se você usar um valor maior, isso pode causar uma latência adicional se ele for usado (mas, se usado, pode ser útil para outros aspectos, como transmitir mais quadros de forma consistente, etc., para YMMV). Quase com certeza, se você definir um valor muito grande para isso e, em seguida, veja a mensagem de lançamento completo do buffer XX, você está apresentando latência. Também existe, aparentemente, uma opção - o nobuffer de vendas que pode ajudar, geralmente para receber fluxos, reduz a latência. Testando a latência Por padrão, o ffplay (como receptor para teste de latência) apresenta uma latência significativa própria, portanto, se você usá-lo para testes (consulte a seção de solução de problemas), pode não refletir a latência com precisão. FFplay apresenta alguns artefatos de vídeo, também, veja as notas para ele na seção de resolução de problemas. Algumas configurações mencionadas acima, como probesize, podem ajudá-lo a começar mais rapidamente. Também é útil: (a parte de sincronização diz para tentar ficar em tempo real). Útil é o mplayer com o seu benchmark para teste de latência (-noaudio e - nocache podem ser úteis, embora eu não tenha encontrado - a falta de fornecer qualquer benefício de latência que possa funcionar para você). Usar a opção SDL out enquanto usa FFmpeg para receber o fluxo também pode ajudar a visualizar quadros com menos latência do lado do cliente: ffmpeg. - f sdl ltinputheregt título da janela (isso funciona especialmente bem com - fflags nobuffer, no entanto, em meus testes ainda não há mais latência do que usar o mplayer - benchmark sempre). Isso não tem quadros de queda se você ficar sem opção de cpu para que ele possa ficar bastante atrasado às vezes (introduzir mais latência de forma variável). Outro possivelmente útil cliente de recepção é omxplayer - live Veja também a seção de transmissão de ponto a ponto esp. Se você usar o UDP etc. Aqui está uma lista de algumas outras idéias a serem testadas (usando o VBR pode ajudar, etc.) Uso da CPU Tamanho do arquivo Em geral, quanto mais CPU você usa para comprimir, melhor será a imagem de saída ou a Menor que um arquivo, o resultado será da mesma qualidade. Basicamente, a maneira mais fácil de salvar a CPU é diminuir a taxa de entrada da taxa, ou diminuir a taxa de saída da taxa. Além disso, você poderia (se capturar a partir de fonte ao vivo), instrua a fonte ao vivo para alimentar um fluxo menor (ex: stream da webcam 640x480 em vez de 1024x1280), ou você poderia definir uma menor configuração de qualidade de saída de saída (nível q) ou especificar uma menor Output bitrate desejado (veja EncodeH.264 para um fundo). Ou tente um codec de saída diferente, ou especifique novos parâmetros para o seu codec (por exemplo, um perfil diferente ou predefinido para libx264). Especificar-seções 0 instrui o codificador a usar todos os núcleos de CPU disponíveis, o que é o padrão. Você também pode redimensionar a entrada primeiro, antes de transcodificá-la, portanto não é tão grande. A aplicação de um filtro de suavização como hqdn3d antes da codificação pode ajudar a comprimir melhor, produzindo arquivos menores. Você também pode definir uma taxa de quadros de saída mais baixa para, naturalmente, diminuir o uso da CPU. Se você conseguir capturar a vida em um formato de pixel que corresponda ao seu formato de saída (ex: saída yuv420p de uma webcam, em vez de mjpeg), isso pode ajudar com o uso da CPU, pois evita uma conversão extra. Usar executáveis de 64 bits em vez de 32 bits (para aqueles que têm essa escolha) podem resultar em uma ligeira aceleração. Se você puder usar - vcodec, copie isso, é claro, usa a menor quantidade de opções de todas as opções, pois ele apenas envia os quadros textualmente para a saída. Às vezes, você pode alterar os formatos de pixels de alguma forma, como usar rgb16 em vez de rgb24, para economizar timespace (ou yuv420 em vez de yuv444 ou similar, uma vez que 420 armazena menos informações que pode comprimir melhor e usar menos largura de banda). Isso pode não afetar a latência. Transmitir um fluxo de áudio RTP simples de FFmpeg FFmpeg pode transmitir um único fluxo usando o protocolo RTP. Para evitar problemas de buffer, por outro lado, a transmissão deve ser feita através da opção - re, o que significa que o fluxo será transmitido em tempo real (ou seja, ele diminui para simular uma fonte de transmissão ao vivo. Por exemplo, O comando a seguir gerará um sinal e o transmitirá para a porta 1234 no localhost: Para reproduzir o fluxo com ffplay (que possui algumas ressalvas, veja acima), execute o comando: Observe que o rtp, por padrão, usa o UDP, que para grande Fluxos, pode causar perda de pacotes. Veja a seção de ponto a ponto neste documento para dicas se isso alguma vez acontecer com você. O codec de transmissão mais popular provavelmente é libx264. No entanto, se você estiver transmitido para um dispositivo que requer uma implementação de linha de base aleijada h264, você Pode usar o perfil de linha de base x264. Alguns argumentaram que o codec de vídeo mp4 é melhor do que a linha de base x264, porque ele codifica também com menos CPU. Você pode usar outros codecs, como mpeg2video ou mesmo qualquer outro codec de vídeo você quer , Normalmente, desde que seu receptor possa decodificá-lo, se ele for adequado às suas necessidades. Observe também que a codificação para a linha de base x264 é basicamente um modo de compatibilidade para dispositivos iOS mais antigos ou similares, veja aqui. O codec de vídeo mpeg4 às vezes também vem dentro de alguns percentuais da compressão das configurações normais do x264, mas usa muito menos cpu para fazer a codificação. Veja ffmpeg. zeranoeforumviewtopic. phpf7ampt631amphilitmpeg4libx264coresampstart10p2163 para alguns gráficos (o que pode estar um pouco desatualizado). Basicamente, nesse teste específico, foi 54 fps a 58 fps (libx264 mais rápido), e o arquivo libx264 era de 5,1 MB e mpeg4 era de 6 MB, mas o mpeg4 usava apenas metade da CPU para sua computação, então pegue com um grão de sal. HTTP Live Streaming e Streaming com múltiplas taxas de bits O FFmpeg suporta a divisão de arquivos (usando o segmento - f para a saída, veja o segmento muxer) em pedaços baseados em tempo, úteis para a saída HTTP do arquivo de estilo stream stream ao vivo. Como o fluxo de dados com várias bitrates simultâneas diferentes é descrito aqui. Salvando um arquivo e Streaming ao mesmo tempo, veja Criando várias saídas. Basicamente, você só pode aceitar de uma webcam ou de alguma outra fonte no máximo um processo, neste caso você precisará dividir sua saída se quiser salvá-la e transmiti-la simultaneamente. O streaming e a gravação simultaneamente (e apenas uma codificação uma vez) também podem salvar a CPU. Transcodificando o FFmpeg repetitivo também pode receber de uma fonte (por exemplo, live ou UDP) e depois transcodificar e retransmitir o fluxo. Um usuário da lista de correspondência escreveu isso, citar: Na minha aplicação, eu tenho um servidor executando vlc sugando fluxos de algumas câmeras, codificando-os como fluxos MPEG2 e enviando-os para as portas 5000 a 5003 no meu servidor intermediário (eu tenho que deixar alguém explicar Como configurar isso, como se alguém fosse parte do projeto). Eu tenho outro servidor executando Wowza, com uma instância chamada live. E eu tenho um servidor intermediário que suga fluxos MPEG2 chegando nas portas 5000 a 5003, transcodificando-os em fluxos mp4 com codecs H.264 e AAC e empurrando os fluxos transcodificados para Wowza. A linha de comando que eu uso para puxar o fluxo da porta 5000, transcodificá-lo e empurrá-lo é: ffmpeg - i udp: localhost: 5000fifosize1000000ampoverrunnonfatal1 - crf 30 - preset ultrafast - acodec aac - strict experimental - ar 44100 - ac 2 - b: Um 96k - vcodec libx264 - r 25 - b: v 500k - f flv rtmp: servidor ltwowza IPgtlivecam0 - i udp: localhost: 5000fifosize1000000ampoverrunnonfatal1 diz a ffmpeg de onde extrair o fluxo de entrada. As peças após o. Provavelmente não são necessários na maioria das vezes, mas eu precisava disso depois de tudo. - crf 30 define o índice de taxa de conteúdo. Esse é um argumento x264 que tenta manter uma qualidade de vídeo razoavelmente consistente, enquanto variam a taxa de bits durante cenas mais complicadas, etc. Um valor de 30 permite qualidade e taxa de bits um pouco menores. Veja EncodeH.264. - presset ultra-rápido como o nome indica implica a codificação mais rápida possível. Se algum tradeoff entre qualidade e codificar a velocidade, vá para a velocidade. Isso pode ser necessário se você estiver transcodificando vários fluxos em uma máquina. - acodec aac define o codec de áudio (codificador AAC interno) - o rigor experimental permite o uso de alguns codecs experimentais (o codificador AAC interno é experimental) - ar 44100 definir a taxa de amostra de áudio - ac 2 especifica dois canais de áudio - b: a 96k Define a taxa de bits de áudio - vcodec libx264 define o codec de vídeo - r 25 define a taxa de quadros - b: v 500k define a taxa de bits do vídeo - f flv diz para entregar o fluxo de saída em um flv wrapper rtmp: o servidor ltwowza IPgtlivecam0 é onde o O fluxo de vídeo transcodificado é empurrado para Ajustar a taxa de bits com base nas condições de linha. FFmpeg não (hoje) suporta variar a taxa de bits de codificação com base em condições de rede flutuantes. Ele suporta a saída em várias bitrates fixas diferentes, ao mesmo tempo, no entanto, veja Streaming com múltiplas taxas de bits nesta página, que está vagamente relacionada. Além disso, se você estiver durante a captura direta do directtshow, o dispositivo de entrada começa a soltar quadros quando há congestionamento, que simula um pouco a bitrate de saída variável. Solução de problemas de transmissão Se você receber uma tela preta no cliente, tente enviar a entrada de tipo yuv422p ou yuv420p. Alguns servidores ficam confusos se você enviar a entrada yuv444 (o padrão para libx264). Observe que quando você está testando suas configurações de fluxo, você pode testá-las com VLC e FFplay. Como FFplay às vezes apresenta seus próprios artefatos quando é dimensionado (FFplay usa escala padrão de qualidade baixa, o que pode ser impreciso). Não use o ffplay como sua linha de base para determinar a qualidade. Transmissão de ponto a ponto Se você deseja transmitir de um computador para outro, você poderia iniciar um servidor em um e, em seguida, transmitir o FFmpeg para esse servidor, então o cliente se conecte a esse servidor (o servidor pode estar no cliente ou no servidor Computadores laterais). Ou você poderia fazer um fluxo de tipo ponto a ponto, como: onde host é o IP receptor. Em seguida, receba o fluxo usando VLC ou ffmpeg dessa porta (uma vez que rtp usa UDP, o receptor pode iniciar a qualquer momento). Se você se deparar com a perda de pacotes (quadros verdes, lágrimas - desde que o UDP não está garantido a entrega, isso pode ocorrer) primeiro certifique-se de que seu FFmpeg é compilado com o suporte de pthreads habilitado (se for, então ele usa um segmento separado para receber do UDP, o que pode causar menos perda de pacotes). Você pode dizer que é especificando um url como udp: host: postfifosize10000 (se ele aceita fifosize, então você é bom para ir). Da mesma forma, para o mplayer, você pode usar o mplayer ffmpeg: udp: host: portfifosizeXXX para resultados possivelmente melhores no final de recebimento (o mplayer precisa de um patch primeiro, rogerdpackgmail de email para ele, uma vez foi gist. githubusercontentrdp9075572raw002dc1b745c895693fdb160cc9be77ef31f75531possiblemplayerudpfix. diff hackey work around patch, aplicado com Ffmpeg subdir). Alternativamente, aumente o tamanho do buffer, como o mplayer ffmpeg: udp: host: portbuffersize10000000 (o padrão é dependente do sistema e geralmente muito baixo para qualquer buffering razoável. No Linux, você pode configurá-lo como 200K max de qualquer maneira, então isso não é bom Suficiente - certifique-se de usar o buffer circular e que o seguinte funciona: ffmpeg: udp: host: portbuffersize10000000fifosize100000 (o fifosize não deve emitir um aviso e implica que você tenha um tópico secundário que colete pacotes recebidos para você se houver Sem aviso prévio). Outra opção é usar algum tipo de transmissão que use o TCP para o seu transporte. (O protocolo RTMP, popular em transmissão para servidores, usa o TCP provavelmente por esse motivo - você simplesmente não pode usar isso para transmissão em ponto a ponto). Uma opção para usar o TCP é assim: o que eu acho que tentará e (como um cliente) estabelecerá uma conexão nesse host naquela porta (assumindo que ele tenha um servidor à espera da conexão recebida). Você poderia recebê-lo assim: (Basica Lly, um lado precisa especificar ouvir e o outro precisa não). Para usar com o mplayer como receptor, seria como e no lado do mplayer (comece o mplayer primeiro). Outra opção é usar o RTP (que, por padrão, usa o UDP), mas especificando o uso do TCP: então você pode recebê-lo assim (ffplay Ou ffmpeg): ffmpeg também tem uma opção de escuta para rtmp, portanto, pode receber um fluxo direto de rtmp de um único cliente dessa maneira. Com córregos baseados em tcp, você provavelmente pode usar qualquer formador de formatação, mas com udp você precisa ter cuidado e usar um muxer que suporte a conexão a qualquer momento, como mpegts. Se você for forçado a usar o udp (por exemplo, você precisa transmitir para uma porta multicast por qualquer motivo), você poderá evitar a perda de pacotes (enviando menos dados ou enviando os mesmos quadros repetidamente para que eles tenham um Maior chance de ser recebido). Veja também a seção sobre i-frames em Latency. Cliente final de trabalho p2p, com multicast: links externos
No comments:
Post a Comment