Se o teu fornecedor de IPTV te mandou um login Xtream (servidor, nome de utilizador, palavra-passe) mas o leitor que queres usar só aceita um único URL M3U — ou ao contrário — não estás preso. As duas coisas são a mesma. Por baixo, um login Xtream é só uma forma arrumada de escrever tudo o que um URL M3U já contém.

Este guia explica a conversão nos dois sentidos, o que tens de ter em conta e como fazer isto sem escreveres as tuas credenciais num sítio onde um estranho as possa ler. O conversor de URLs Xtream ↔ M3U deste site faz a conversão inteiramente no teu browser — não há nenhum endpoint de servidor por trás dessa página.

Três pastilhas etiquetadas — servidor, nome de utilizador, palavra-passe — em cima, com impulsos coloridos a descer para as partes correspondentes da fórmula do URL get.php em baixo.

O URL M3U é um molde fixo; um login Xtream é só essas três credenciais encaixadas nele.

Porque é que a conversão chega a colocar-se

O mesmo fornecedor quase sempre suporta as duas formas, mas o leitor que calhar instalares só pede uma delas. As apps divergem em alguns pontos específicos:

  • Leitores à moda antiga, só M3U (VLC, apps básicas de smart TV, boxes IPTV dedicadas) recebem um único URL. Não sabem nada dos endpoints da API Xtream; descarregam um ficheiro de playlist plano e reproduzem streams a partir dele.
  • Leitores que entendem Xtream (a maioria das apps de IPTV modernas, incluindo o Klipa) preferem o trio de credenciais. Usam-no para ir buscar a lista de canais em direto, a biblioteca de VOD, o catálogo de séries e o EPG como documentos separados — categorização melhor, atualização dinâmica e secções a pedido que a exportação M3U não consegue representar.

Se o teu fornecedor te deu uma forma e o leitor quer a outra, a conversão é uma operação de 30 segundos. Não precisas de pedir "o outro formato" ao fornecedor — eles já estão a dar-te os dois, só que num formato.

A fórmula Xtream → M3U

Todos os fornecedores Xtream usam o mesmo molde de URL. Assim que o conheces, consegues construir o URL M3U à mão a partir das credenciais:

http://<servidor>:<porta>/get.php?username=<USERNAME>&password=<PASSWORD>&type=m3u_plus&output=mpegts

Três exemplos concretos, com as credenciais servidor: http://server.example:8080, username: ABC, password: XYZ:

M3U:        http://server.example:8080/get.php?username=ABC&password=XYZ&type=m3u_plus&output=mpegts
EPG:        http://server.example:8080/xmltv.php?username=ABC&password=XYZ
player_api: http://server.example:8080/player_api.php?username=ABC&password=XYZ

As peças:

  • get.php é o endpoint da playlist. Chama-se sempre get.php — não há aqui nenhuma convenção específica do fornecedor.
  • type=m3u_plus pede o formato M3U estendido, que inclui logótipos de canais e títulos de grupo. O type=m3u simples também funciona, mas produz uma playlist mais magra; quase sempre vais querer m3u_plus.
  • output=mpegts pede streams que tocam em MPEG-TS bruto. A outra opção comum é output=hls, que produz URLs HLS (.m3u8) — útil em browsers e em alguns dispositivos Apple, mas com suporte menos universal em boxes de TV. Se o teu leitor for esquisito, trocar o output é a primeira coisa a tentar.
  • xmltv.php é o endpoint do EPG. Mesmas credenciais, documento separado. A maioria dos leitores aceita este URL num campo diferente ("EPG URL" ou "XMLTV URL").
  • player_api.php é a API JSON. Os leitores que "falam Xtream nativamente" usam-na para obter as árvores live/VOD/séries e os logótipos dos canais.

The reverse: extracting credentials from an M3U URL

Dado um URL M3U que se pareça com a fórmula acima, consegues ler os três campos Xtream de volta diretamente:

http://server.example:8080/get.php?username=ABC&password=XYZ&type=m3u_plus
                                            └────┘          └────┘
                                            utilizador    palavra-passe
  • Servidor é tudo o que vem antes da primeira barra a seguir ao host: http://server.example:8080. Tira o /get.php e tudo o que vem a seguir.
  • Nome de utilizador é o valor do parâmetro username da query string.
  • Palavra-passe é o valor do parâmetro password da query string.

Se faltar um parâmetro de query, o URL não está no formato Xtream padrão. Há fornecedores que enviam URLs M3U planos sem credenciais nenhumas dentro — tipicamente playlists estáticas ou baseadas em token, em que o próprio URL é o segredo. Não há nada a extrair desses; usas o URL tal como está em qualquer leitor compatível com M3U.

Armadilhas comuns

Há alguns pormenores que fazem cair muita gente.

Codificação URL de caracteres especiais

Se a tua palavra-passe contém caracteres como &, =, +, #, % ou /, têm de ser percent-encoded dentro do URL. Um & literal a meio da palavra-passe parte a análise do URL — o leitor trataria tudo o que vem depois como um parâmetro de query separado.

A maioria dos painéis de controlo dos fornecedores faz isto por ti. Se estás a construir o URL à mão e a tua palavra-passe tem alguma coisa esquisita, passa a palavra-passe por qualquer ferramenta de "URL encode" primeiro. Ou esquece e deixa o conversor no browser fazer isto por ti.

A porta

Os fornecedores Xtream raramente correm nas portas predefinidas 80 ou 443. As mais comuns são a 8080, a 25461, a 8000 ou uma porta alta qualquer. A porta faz parte do URL do servidor, não é opcional. Se vires http://server.example/get.php?… sem porta, ou está a usar a 80 (raro) ou o fornecedor tem um reverse proxy à frente (também raro). Quase sempre a porta está em falta porque alguém copiou o URL à mão e a deixou cair.

http vs https

A maioria dos fornecedores Xtream serve HTTP, não HTTPS. A forma https:// devolve, muitas vezes, um erro de certificado ou um 404 porque o servidor nem sequer aceita TLS. Se te deram um URL de servidor com https:// e não funciona, experimenta o http:// simples. O preço a pagar é que a palavra-passe passa a viajar sem encriptação; é, infelizmente, a norma nos fornecedores de IPTV.

Caminho personalizado no URL M3U

Alguns fornecedores personalizam o encaminhamento — em vez de /get.php, vês /playlist.m3u, /m3u.php ou até /index.php?type=m3u. As credenciais dentro desses URLs continuam a corresponder ao que a API Xtream espera, por isso o conversor extrai-as corretamente, mas o URL de playlist que o fornecedor usa não é o padrão. Se construíres o teu próprio URL M3U a usar o caminho padrão /get.php, o fornecedor pode rejeitá-lo. Nestes casos, mantém o URL original que o fornecedor te deu — não tentes "corrigi-lo".

Espaços invisíveis nas credenciais

Colar a partir de um email ou de uma publicação num fórum arrasta com frequência um espaço, uma nova linha ou um non-breaking space invisível para o nome de utilizador. A API Xtream trata ABC e ABC como nomes de utilizador diferentes; vais receber uma resposta de autenticação falhada idêntica à de uma palavra-passe errada. O conversor remove automaticamente espaços do nome de utilizador e avisa-te quando o fez. Se estás a construir o URL à mão, cola cada campo num editor de texto simples primeiro e verifica o final visualmente.

Fazer a conversão com segurança

Há vários sites a oferecer esta conversão online. A maioria está bem; alguns são duvidosos. O risco é simples — credenciais coladas num formulário de um estranho podem ser registadas, recolhidas ou repetidas. Mesmo um operador honesto sem intenção maliciosa tem logs de acesso.

O conversor deste site está construído de forma a não poder ter logs sobre as tuas credenciais, porque não tem nenhum endpoint de servidor por trás. A conversão corre inteiramente no teu browser como JavaScript. As credenciais ficam em elementos de input do DOM até a página fechar; não estão na barra de URL, não estão em localStorage e não são enviadas para lado nenhum. Se abrires o separador de rede do browser durante uma conversão, vais ver exatamente zero pedidos de saída a transportar as credenciais.

É este o padrão que deves esperar de qualquer ferramenta que peça credenciais de IPTV. Se a interface de um conversor faz um pedido de rede quando carregas em "converter", já, por definição, transmitiu as tuas credenciais para algum lado.

Depois da conversão: verifica antes de importar

Um URL construído com sucesso não significa um URL funcional. Os dois sentidos da conversão são transformações de strings deterministas — estão corretos como transformações, mas não te dizem se as credenciais são válidas, se a subscrição está em vigor ou se o servidor está acessível.

Duas verificações baratas antes de te comprometeres com a importação:

  • Para URLs M3U, cola o resultado no testador de playlists M3U. Vai buscar a playlist, analisa-a e sonda os primeiros 100 streams. Tudo a verde significa que o URL está bom; tudo a vermelho diz-te o modo de falha específico (resposta HTML, 404, streams mortos).
  • Para credenciais Xtream, cola o trio no verificador de credenciais Xtream. Chama a API do lado do servidor, devolve o estado de autenticação, a validade, os limites de ligação e o número de canais. Distingue "palavra-passe errada" de "subscrição expirada" de "servidor inacessível".

Correr uma destas verificações antes de te dares ao trabalho de instalar um leitor poupa-te uns vinte minutos de debug quando há mesmo qualquer coisa errada com as credenciais.

Quando o URL M3U não tem credenciais

Uma pequena parte dos URLs M3U que vais encontrar não são Xtream de todo. São playlists planas alojadas num servidor estático, ou URLs com token em que o segredo está no caminho, não na query string:

https://server.example/playlists/9c1f4a8b3e/stream.m3u8

Não há nada a extrair — o próprio URL é a credencial. Funcionam em leitores só de M3U tal como estão. Não têm representação equivalente em Xtream porque não são gerados pelo painel do Xtream Codes; vêm de uma stack de IPTV diferente (e mais antiga). Se o teu fornecedor só te deu isto e o teu leitor insiste em credenciais Xtream, não há login Xtream para te dar. Pergunta ao fornecedor ou escolhe um leitor que aceite URLs M3U.

Como é isto no Klipa

O Klipa aceita as duas formas na mesma biblioteca, lado a lado. Podes adicionar um URL M3U e um login Xtream do mesmo fornecedor como fontes separadas; a app usa a que estiver saudável. Se um dia a exportação M3U começa a devolver HTML, a chamada à API Xtream mantém a tua lista de canais viva até à próxima atualização, e vice-versa.

É esta a resposta simples a "que formato devo usar" — os dois. Se vais escolher só um, a comparação Xtream vs M3U aborda quando começar por qual.