Se andaste a fazer pesquisas sobre IPTV, viste duas expressões a repetir-se vezes sem conta: "URL M3U" e "Xtream Codes". Por baixo do capô são quase a mesma coisa, e quase todos os leitores modernos suportam as duas, mas a escolha conta — falham de formas diferentes, e trocar de uma para a outra é, muitas vezes, a forma mais barata de resolver um problema.
Esta é a comparação de um utilizador prático de IPTV, não uma análise do protocolo.
O M3U é uma transferência de um ficheiro; o Xtream é uma pequena API com a qual o leitor mantém conversa.
O que são, na realidade
O M3U é um ficheiro de texto plano. Abre um num editor de texto e vês um cabeçalho (#EXTM3U) seguido de uma sequência de linhas #EXTINF:… que emparelham cada canal com um URL de stream. É praticamente o formato mais simples que existe. O teu leitor descarrega o ficheiro uma vez, analisa-o e fica com a lista de canais.
#EXTM3U
#EXTINF:-1 tvg-id="bbc1" group-title="UK",BBC One HD
http://provider.example/live/bbc1/index.m3u8
É este o modelo de dados todo: uma lista de canais, cada um com um nome e um URL. Nada dinâmico. Se queres uma lista atualizada, voltas a descarregar o ficheiro.
O Xtream Codes é uma API HTTP. Dás ao leitor um servidor, um nome de utilizador e uma palavra-passe; o leitor chama uma mão-cheia de endpoints (get.php?type=m3u_plus, player_api.php, xmltv.php) para ir buscar a lista de canais, a biblioteca de VOD, o catálogo de séries e o guia como documentos separados. Os URLs de stream propriamente ditos são construídos pelo leitor a partir das credenciais e do ID do canal.
Em termos mecânicos, um login Xtream devolve quase sempre uma M3U num dos seus endpoints — quando "importas uma M3U" de um fornecedor Xtream, estás a usar uma chamada específica desta API. O contrário não é verdade: uma M3U pura não expõe mais nada.
Quando escolher cada
Usa M3U se:
- Só te interessam canais em direto. A M3U não tem conceito de catálogo de VOD ou séries; se o teu fornecedor entrega isso, a M3U não os mostra.
- Queres guardar uma cópia local. O ficheiro M3U é portátil — fazes backup, editas num editor de texto, partilhas um subconjunto cuidado com outra pessoa.
- Não confias que o fornecedor vá ficar por aí. Uma M3U exportada continua a funcionar enquanto os URLs de stream lá dentro funcionarem, mesmo que o endpoint da API do fornecedor desapareça amanhã.
- O fornecedor tem bugs. A M3U tem menos peças em movimento. Se a API Xtream deles é instável mas a exportação M3U funciona, usa simplesmente a M3U.
Usa Xtream Codes se:
- Queres VOD e séries. Não aparecem em M3U pura.
- Queres categorias que o leitor consiga usar de forma nativa. O Xtream envia "live", "VOD", "series" como árvores separadas; a M3U só tem strings
group-title, que são convencionais mas não estruturadas. - Mudas de dispositivo com frequência e não queres voltar a importar. As credenciais Xtream funcionam em todo o lado, e qualquer leitor compatível pega exatamente na mesma biblioteca a partir delas.
- Queres que o leitor atualize a lista de canais dinamicamente. O Xtream volta a ir buscar a cada sessão; a M3U é uma fotografia num momento.
Como saber qual é o teu
Se subscreveste um fornecedor e te mandaram uma única linha tipo:
http://server.example:8080/get.php?username=ABC&password=XYZ&type=m3u_plus&output=mpegts
Isso é um URL M3U. Podes colá-lo diretamente no testador de M3U para confirmar que funciona.
Se te mandaram três coisas — um URL de servidor, um nome de utilizador, uma palavra-passe — isso é um login Xtream. A maioria dos leitores modernos tem um formulário separado de "Adicionar fonte Xtream". Quase todos os fornecedores expõem alegremente os dois: as mesmas credenciais funcionam por ambas as interfaces, e podes usar o testador de M3U para verificar o endpoint da playlist e o validador de EPG para verificar o endpoint do guia, tudo sem instalar nada.
Modos de falha comuns (e para que forma trocar)
O mesmo fornecedor pode estar perfeitamente saudável numa interface e estragado na outra. Vale a pena conhecer seis modos de falha.
A M3U devolve HTML
Colas o URL no testador e obténs "o servidor devolveu uma página HTML". Normalmente significa que o endpoint M3U precisa de um cookie de sessão, ou que o teu fornecedor aplicou rate limit ao IP que está a aceder. Experimenta Xtream — os endpoints da API são, muitas vezes, menos restringidos do que a exportação em massa M3U.
O Xtream devolve "auth failed" mas a M3U funciona
Há fornecedores que atualizam a base de credenciais Xtream com atraso. O URL M3U é assinado no momento da emissão e continua a funcionar; a API rejeita-te porque ainda não pegou na nova palavra-passe. Espera uma hora, ou usa simplesmente a M3U.
Um leitor lê, outro não
O Xtream Codes é uma especificação de facto, não uma especificação real. Há fornecedores que dizem suportar Xtream mas só implementam dois dos endpoints normalmente esperados; há leitores que vão a um endpoint não-padrão e falham quando ele falta. Se um leitor não consegue ler o teu fornecedor Xtream mas lê M3U sem problemas, passa para M3U. O contrário é mais raro, mas acontece.
Logótipos de canais em falta na M3U, presentes no Xtream
Na M3U, os URLs dos logótipos são inline (tvg-logo="…"). No Xtream, são servidos por um endpoint de logótipos. Se a tua M3U tem URLs de logótipo malformados ou desatualizados, passar para Xtream volta a preenchê-los. O caso inverso (logótipos na M3U, em falta no Xtream) quase nunca acontece.
O EPG associa-se aos canais numa forma mas não na outra
O <channel id="…"> do XMLTV tem de bater certo com tvg-id="…" na M3U ou com o campo channel-id no Xtream. Estes IDs nem sempre são os mesmos nas duas formas — há fornecedores que os regeneram periodicamente. Se o teu guia está vazio em M3U mas preenchido em Xtream, os IDs estavam dessincronizados na M3U; usa Xtream.
Uma das formas é mais rápida
O Xtream numa rede lenta faz muito mais idas e voltas do que a M3U. Numa ligação instável, a diferença pode ser de 5 a 10 segundos no arranque. A M3U descarrega uma vez e continua a partir de dados locais. Se a velocidade no primeiro arranque te interessa, a M3U costuma ganhar.
O que o Klipa faz
O Klipa suporta as duas, trata-as como fontes intercambiáveis (podes ter uma M3U e um login Xtream lado a lado na mesma biblioteca) e volta a procurá-las em segundo plano. Se a M3U começa a devolver HTML, a sessão Xtream mantém a tua lista de canais viva até à próxima atualização. Se a autenticação Xtream se parte, a M3U em cache continua a funcionar.
A recomendação forte é: escolhe a que o teu fornecedor oferecer com mais fiabilidade, mas não sejas leal a uma forma. O formato não é o produto. Os canais é que são.