ActivityPub & O Protocolo Fediverse
Esta página documenta a implementação do ActivityPub dentro do Owncast a nível de protocolo: quais atividades um servidor envia, quais ele recebe, como se identifica, e como assina e verifica requisições. É voltada para desenvolvedores que desejam construir uma aplicação Fediverse que opere com o Owncast, seja isso seguindo um servidor Owncast de outra plataforma, consumindo suas notificações ao vivo, ou construindo ferramentas que compreendam as extensões personalizadas do Owncast.
Se você é um operador do Owncast e apenas quer ativar a federação, veja O Fediverso e Habilitando recursos sociais em vez disso. Esta página assume familiaridade com ActivityPub, ActivityStreams 2.0, JSON-LD e Assinaturas HTTP.
Modelo mental
Um servidor Owncast se federaliza como um único ator do tipo Serviço. Há uma conta por servidor (nome de usuário padrão live), e ela representa a própria transmissão em vez de uma pessoa. Em comparação a um servidor social de propósito geral, o modelo é intencionalmente restrito:
- O ator envia postagens para seus seguidores (mais importante, uma notificação de "entrar ao vivo") e um "ping" periódico da transmissão.
- The actor receives follows, likes, boosts (announces), replies and mentions, quote requests, and a handful of server-to-server activities. Inbound posts are only surfaced to the operator and plugins: they are never added to a timeline and never re-federated.
- Há exatamente um usuário, sem registro aberto, e a coleção
followingestá sempre vazia.
Todos os endpoints de federação retornam 405 Método Não Permitido quando a federação está desativada, então verifique isso primeiro se um servidor parecer inacessível.
Descoberta
Um aplicativo remoto localiza e descreve um ator Owncast através dos mecanismos de descoberta bem conhecidos padrão.
WebFinger
GET /.well-known/webfinger?resource=acct:{username}@{host}
O resource deve ser um URI acct: cujo host corresponda ao host configurado do servidor (caso contrário, a requisição é rejeitada com 501/400). A resposta é servida como application/jrd+json:
{
"subject": "acct:live@owncast.example.com",
"aliases": ["https://owncast.example.com/federation/user/live"],
"links": [
{
"rel": "self",
"type": "application/activity+json",
"href": "https://owncast.example.com/federation/user/live"
},
{
"rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": "https://owncast.example.com/federation/user/live"
},
{
"rel": "http://webfinger.net/rel/avatar",
"type": "image/png",
"href": "https://owncast.example.com/logo/external"
},
{
"rel": "alternate",
"type": "application/x-mpegURL",
"href": "https://owncast.example.com/hls/stream.m3u8"
}
]
}
O link self é o IRI canônico do ator. Observe o link alternate específico do Owncast do tipo application/x-mpegURL: ele aponta diretamente para a playlist HLS da transmissão, que permite que os clientes descubram o vídeo ao vivo sem precisar raspar a interface web.
host-meta
GET /.well-known/host-meta
Retorna um documento XRD apontando de volta para o endpoint WebFinger, para clientes que inicializam a partir de host-meta:
<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
<Link rel="lrdd" type="application/json"
template="https://owncast.example.com/.well-known/webfinger?resource={uri}"/>
</XRD>
NodeInfo
O Owncast expõe metadados a nível de servidor através do NodeInfo para que crawlers, diretórios e sites de estatísticas do Fediverse possam descrever a instância.
Descoberta NodeInfo — GET /.well-known/nodeinfo:
{
"links": [
{
"rel": "http://nodeinfo.diaspora.software/ns/schema/2.0",
"href": "https://owncast.example.com/nodeinfo/2.0"
}
]
}
NodeInfo 2.0 — GET /nodeinfo/2.0:
{
"version": "2.0",
"software": {
"name": "owncast",
"version": "0.2.x"
},
"protocols": ["activitypub"],
"services": {
"inbound": [],
"outbound": []
},
"usage": {
"users": {
"total": 1,
"activeMonth": 1,
"activeHalfyear": 1
},
"localPosts": 42
},
"openRegistrations": false,
"metadata": {
"chat_enabled": true,
"federation": {
"username": "live",
"featured_streams": 1
}
}
}
A maior parte disso é NodeInfo padrão, com alguns sinais específicos do Owncast que valem a pena mencionar:
software.nameé sempreowncast. Esta é a maneira mais confiável de detectar que você está se comunicando com um servidor Owncast.usage.users.totalé sempre1eopenRegistrationsé semprefalse— uma instância Owncast é um servidor de único ator, não uma comunidade multiusuário.usage.localPostsé a contagem de atividades que o servidor enviou (notificações de ir ao vivo e outras mensagens públicas), que é um proxy útil para quão ativo está o stream.metadata.chat_enabledreflete se o chat embutido do Owncast está habilitado.metadata.federationé o bloco específico do Owncast:usernameé o nome de usuário preferido do ator (padrãolive). Combinado com o host, isso lhe dá o identificadoracct:sem uma viagem separada ao WebFinger.featured_streamsindica participação no fluxo de streams em destaque / mini-diretório (veja Pings de Stream abaixo). Um valor de1significa que o servidor anuncia seu status ao vivo para os seguidores através de atividadesOfferperiódicas.
x-nodeinfo2 — GET /.well-known/x-nodeinfo2 fornece as mesmas informações na forma x-nodeinfo2 alternativa usada por alguns diretórios, incluindo um bloco organization (name, contact) e um número de usuário activeWeek. Aqui services.inbound/services.outbound são ambos ["activitypub"].
API da instância Mastodon — GET /api/v1/instance retorna uma descrição de instância compatível com Mastodon (uri, title, short_description, description, version, thumbnail, stats, e flags de registro) para que ferramentas cientes do Mastodon possam renderizar um cartão de instância familiar. stats.user_count é 1, stats.status_count é a contagem de postagens locais, e registros/aprovações/convites estão todos desativados.
O ator
GET /federation/user/{username}
Accept: application/activity+json
Solicitar o IRI do ator com um cabeçalho Accept do ActivityStreams retorna o documento do ator. O Owncast se representa como um Serviço (não como uma Pessoa). A forma é:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1"
],
"type": "Service",
"id": "https://owncast.example.com/federation/user/live",
"preferredUsername": "live",
"name": "My Owncast Server",
"summary": "Server description / bio",
"url": "https://owncast.example.com/federation/user/live",
"published": "2023-01-01T00:00:00Z",
"manuallyApprovesFollowers": false,
"discoverable": true,
"inbox": "https://owncast.example.com/federation/user/live/inbox",
"outbox": "https://owncast.example.com/federation/user/live/outbox",
"followers": "https://owncast.example.com/federation/user/live/followers",
"icon": {
"type": "Image",
"mediaType": "image/png",
"url": "https://owncast.example.com/logo/external?uc=..."
},
"image": {
"type": "Image",
"url": "https://owncast.example.com/logo/external?uc=..."
},
"tag": [
{
"type": "Hashtag",
"name": "#owncast",
"href": "https://owncast.directory/tags/owncast"
}
],
"attachment": [
{
"type": "PropertyValue",
"name": "Website",
"value": "<a href=\"...\">...</a>"
}
],
"publicKey": {
"id": "https://owncast.example.com/federation/user/live#main-key",
"owner": "https://owncast.example.com/federation/user/live",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
}
}
Pontos-chave para uma implementação interoperável:
- O layout do IRI do ator é
{server}/federation/user/{username}, e as coleções estão ligadas a ele:{actor}/inbox,{actor}/outbox,{actor}/followers. followingé solicitado em{actor}/followingmas sempre retorna404— o Owncast nunca expõe uma lista de seguimentos.manuallyApprovesFollowersreflete se o servidor está em modo de federação privado. Quandotrue, os follows não são aceitos automaticamente.discoverableé sempretrue(usando a semântica do namespacetoot:).- A chave pública vive em
{actor}#main-key, é uma chave RSA-2048 em forma PEM (PKIX), e é o que você usa para verificar as assinaturas HTTP do servidor.
Assinaturas HTTP
O Owncast assina suas requisições enviadas e verifica as recebidas usando o esquema de cabeçalho HTTP "Signature" (draft-cavage Assinaturas HTTP, como usado em todo o Fediverse).
Verificando requisições que o Owncast envia para você
Quando o Owncast POSTa uma atividade para sua caixa de entrada, inclui:
- Um cabeçalho
SignaturecomkeyId="{actor}#main-key",algorithm="rsa-sha256", e a lista deheadersassinados. - Os cabeçalhos assinados cobrem
(request-target),host,date, edigest. - Um cabeçalho
Digestcontendo o digest SHA-256 do corpo da requisição. Content-Type: application/activity+jsone umUser-Agentda forma{version}; https://owncast.online.
Para verificar: busque o ator em keyId, leia publicKey.publicKeyPem, e verifique tanto a assinatura quanto o digest do corpo.
Assinando requisições que você envia para o Owncast
O Owncast verifica a assinatura em cada atividade entregue à sua caixa de entrada:
- Ele analisa
keyIdealgorithmdo seu cabeçalhoSignature. OkeyIddeve ser uma URLhttps://. - Ele resolve seu ator e busca sua chave pública.
- Ele verifica se o domínio que possui a sua chave não está na lista de domínios bloqueados da instância e que o ator em si não está bloqueado.
- Ele verifica a assinatura, tentando o algoritmo declarado e depois retrocedendo para
rsa-sha256ersa-sha512. - Ele verifica o cabeçalho
Digestem relação ao corpo da requisição. - If your request carries a parseable
Dateheader, it must be close to the server's clock: a date more than 1 hour in the past or more than 1 hour in the future is rejected. This bounds replay of captured, validly-signed requests. A missing or unparseableDateskips the check.
Na prática, isso significa: assinar (request-target) host date digest com uma chave RSA, publicar essa chave no campo publicKey do seu ator, incluir um Digest SHA-256, e servir seu ator via HTTPS.
Atividades que o Owncast envia (saídas)
Todas as atividades de saída se originam do ator do servidor e são entregues às caixas de entrada dos seguidores (preferindo sharedInbox onde um seguidor anuncia um). Atividades públicas são endereçadas para https://www.w3.org/ns/activitystreams#Public em to com a coleção de seguidores em cc; em modo privado, elas são endereçadas apenas para a coleção de seguidores.
| Atividade | Objeto | Quando | Enviado para |
|---|---|---|---|
Create | Note | O stream vai ao vivo (a mensagem de "ir ao vivo"); outras postagens públicas | Seguidores (+ Público) |
Update | Service | O perfil do servidor (nome, avatar, resumo, etc.) mudanças | Seguidores |
Siga | iri do ator | Um operador segue outro servidor Owncast (fluxo de streams em destaque) | O servidor-alvo |
Offer | url do servidor | Periodicamente enquanto estiver ao vivo, como um "ping" da transmissão | Diretório de seguidores |
Accept | Follow de entrada | Em resposta a um Follow recebido | O seguidor |
Reject | inbound Follow | Quando o operador remove um diretório que estava listando esse servidor | Esse diretório |
Sair | server URL | The stream ends (the offline counterpart to Offer) | Directory followers |
Undo | Seguir | An operator unfeatures an Owncast server they previously followed | The target server |
Accept / Reject | inbound QuoteRequest | In response to a received QuoteRequest | The requester |
Create / Note — ir ao vivo
A atividade mais importante. Quando a transmissão vai ao vivo, o Owncast envia um Create envolvendo um Note. O Note contém HTML content (a mensagem de ir ao vivo configurável, título do stream, links de hashtags, e um link de volta para o servidor), tags Hashtag, e — quando disponível — um anexo de Imagem com a pré-visualização do stream (preview.gif ou thumbnail.jpg). Se o servidor estiver marcado como NSFW, o note contém sensitive: true. Hashtags linkam para https://owncast.directory/tags/{tag}, e uma hashtag #owncast é sempre adicionada.
Esta é a atividade que mais interessa aos consumidores: assine seguindo o ator, depois acompanhe a caixa de entrada para atividades Create/Note para saber quando um stream começa.
Oferta / ping da transmissão (saída)
Esta é uma extensão do Owncast que suporta o recurso de streams em destaque / mini-diretório. Enquanto ao vivo, o servidor envia periodicamente uma atividade Offer cujo object é a URL do servidor, levando metadados personalizados do Owncast (status do stream, título, descrição, nome do servidor, logotipo, tags). Isso permite que um diretório receptor mantenha sua lista de streams ao vivo atualizada sem polling. The matching offline signal is the Leave activity, sent when the stream ends. O Owncast envia Offer e Leave apenas para seguidores que se identificaram como um diretório (veja o namespace personalizado), nunca para seguidores fãs comuns.
Atualizar, Seguir, Aceitar
Updatedo atorServiceé enviado para seguidores quando os metadados do perfil do servidor mudam, para que caches remotos atualizem.Followé enviado quando um operador segue outro servidor Owncast. O servidor então espera umAccept(ouReject) de volta.Aceitaré enviado automaticamente em resposta a umSeguirquando o servidor está em modo público (auto-aprovar).
Atividades que o Owncast recebe (entrada)
Entregue isso POSTando uma atividade assinada na inbox do ator. The inbox returns 202 Accepted immediately and processes the activity asynchronously, so a 202 only means the activity was queued, not that it was acted on. Owncast signature-verifies and dispatches each one from that queue.
| Atividade | Manipulação |
|---|---|
Follow | Armazena o seguidor; auto-aprova e retorna Aceitar em modo público (mantido para aprovação em modo privado). Um follow com o marcador ns#directory é sempre mantido para aprovação manual, independentemente do modo, e não emite o evento follow. Caso contrário, emite um evento FediverseEngagementFollow. |
Desfazer → Seguir | Remove o seguidor. |
Curtir | Registra um engajamento contra um objeto local. Emite FediverseEngagementLike. |
Anunciar | Impulsionar/repostar um objeto local. Registra um engajamento e emite FediverseEngagementRepost. |
Aceitar → Seguir | Marca um servidor remoto do Owncast que seguimos como aceito (fluxo de streams destacados). |
Rejeitar → Seguir | Marca nosso follow de um servidor remoto como rejeitado. |
Oferta | Um ping de stream de outro servidor Owncast. Se levar streamStatus: "live", o Owncast marca aquele servidor como online na tabela de servidores federados e armazena os metadados do stream. |
Leave | O contraparte offline de Oferta: marca o stream do servidor Owncast como offline. |
Update → Person | Atualiza os metadados armazenados (nome exibido, inbox, inbox compartilhada, avatar) de um seguidor existente. Updates with any other object type are ignored. |
Create → Note | Accepted when the object is a single Note attributed to the signing actor and the note is either a reply to a post this server published or addressed to the actor (a mention). Raised as an event for the operator and plugins, not added to any timeline. See inbound posts. |
QuoteRequest | A FEP-044f request to quote one of the server's posts. Accepted only for locally authored posts while federation is public and quotes are enabled. Answered with Accept or Reject. See quote requests. |
Dois guardas importantes:
- Limite de idade do engajamento. Atividades
CurtireAnunciarsão registradas somente se o objeto referenciado tiver no máximo 36 horas. Engajamentos mais antigos são ignorados. Isso mantém as notificações de engajamento vinculadas a streams recentes. - Bloqueio & SSRF. Atividades de entrada de domínios/atores bloqueados são rejeitadas durante a verificação de assinatura. Entregas de saída rejeitam URLs de inbox não-HTTPS e internas/loopback.
Inbound posts (Create)
Earlier releases rejected every inbound Create. Owncast 0.3.0 accepts the narrow cases described here.
Owncast accepts a Create whose object is exactly one Note attributed to the same actor that sent it. It keeps two kinds of notes: replies to a post the server itself published, and notes that address the actor directly (mentions). Everything else is ignored. An accepted post is raised as a reply or mention event for the operator's integrations and plugins. It is not added to a timeline, is not shown to viewers, and is never re-federated, so there is still no public conversation surface on an Owncast server.
Quote requests (FEP-044f)
QuoteRequest handling is new in Owncast 0.3.0.
A remote user asking permission to quote one of the server's posts sends a FEP-044f QuoteRequest whose object is the post being quoted and whose instrument is the quote post itself. Owncast accepts the request only when the quoted object is a post this server authored, federation is in public mode, and the operator has quoting enabled. On accept it stores a QuoteAuthorization stamp as a dereferenceable object and replies with an Accept whose result is the stamp's IRI, so any server can fetch the stamp to verify the quote was approved. Every other case gets a Reject, which clears the pending quote on the remote end.
Atividades de servidor para servidor
Oferta, Sair, Aceitar e Rejeitar juntos formam o protocolo "streams destacados" do Owncast. Se você está construindo um diretório ou agregador que deseja participar, o padrão é:
- Envie um
Seguirque define o marcadorns#directory(veja o namespace personalizado) para o ator do servidor Owncast. O operador aprova manualmente, então espera umAceitar. - Receba atividades periódicas
Oferta(com metadados do Owncast) enquanto o servidor estiver ao vivo. - Receba um
Sairquando o stream terminar.
Você também pode consumir apenas os padrões Criar/Nota de publicações ao vivo se não precisar de pings de liveness em tempo real.
Namespace personalizado do Owncast
O Owncast adiciona um pequeno conjunto de propriedades JSON-LD personalizadas sob o namespace https://owncast.online/ns#. As propriedades de metadados de stream aparecem como campos adicionais de nível superior em atividades Oferta (e relacionadas a servidor-para-servidor) e permitem que um receptor preencha uma entrada de diretório a partir de uma única atividade. O marcador ns#directory aparece em um Seguir e identifica o remetente como um diretório. Todos são opcionais e seguros para ignorar se você se importar apenas com o ActivityPub padrão.
| Propriedade | Tipo | Significado |
|---|---|---|
https://owncast.online/ns#streamStatus | string | "live" ou "offline". Sempre presente em atividades de servidor-para-servidor. |
https://owncast.online/ns#streamTitle | string | Título do stream atual, quando definido. |
https://owncast.online/ns#streamDescription | string | Resumo/descrição do servidor. |
https://owncast.online/ns#serverName | string | Nome de servidor legível por humanos. |
https://owncast.online/ns#logoUrl | string | URL absoluta para o logo do servidor. |
https://owncast.online/ns#thumbnailUrl | string | URL absoluta para a miniatura do stream atual. |
https://owncast.online/ns#streamTags | array de strings | Tags de metadados do servidor. |
https://owncast.online/ns#directory | boolean | Definido como true em um Seguir para identificar o remetente como um diretório. |
Um diretório se identifica definindo ns#directory como true no Seguir que envia. Esse marcador, e apenas esse marcador, faz o Owncast tratar o follow como uma listagem de diretório: ele mantém o follow para o operador aprovar, e uma vez aprovado, entrega o Oferta e pings de Sair para aquele seguidor. Os campos de metadados de stream acima são apenas descritivos e não, por si só, identificam um diretório.
Construindo um diretório de streams do Owncast
As atividades de servidor-para-servidor que impulsionam o próprio recurso de streams destacados do Owncast estão abertas para você consumir. Se você quiser executar um diretório ou agregador que rastreia quais servidores Owncast estão ao vivo, você segue cada servidor da maneira que qualquer ator do Fediverse faria e, em seguida, reage aos sinais de liveness que ele envia.
Para uma referência de exemplo completa e executável, veja o repositório owncast-directory-example. É uma pequena aplicação em Python que implementa tudo nesta seção: um ator publicado, o follow ns#directory, o manuseio de Oferta/Sair/Rejeitar, e uma página web que lista os servidores ao vivo. Trate-a como um ponto de partida e não como um serviço de produção.
Você precisa de um ator publicado e solicitações assinadas, assim como qualquer seguidor (veja Assinaturas HTTP). A partir daí:
- Envie um
Seguirassinado que definehttps://owncast.online/ns#directorycomotrue(veja o namespace personalizado) para o ator de cada servidor. Esse marcador identifica você como um diretório, que é o que faz o servidor entregar seus pings de stream para você, e faz com que a inclusão na listagem seja por opção: um servidor Owncast sempre mantém um follow de diretório para seu operador aprovar manualmente, não importa como a privacidade da federação do servidor está configurada. Você não receberá nenhum status até que o operador aprove, então espere que as entradas permaneçam pendentes até que cada uma opte por entrar. UmSeguirsem o marcador é tratado como um follow comum: pode ser auto-aceito, mas nunca receberá os pings deOferta/Sair. - Enquanto um servidor está ao vivo, ele posta uma
Ofertaem sua inbox aproximadamente a cada 5 minutos, levando os metadados personalizados do Owncast: status do stream, título, descrição, nome do servidor, logo, miniatura e tags. Crie ou atualize a entrada do diretório daquele servidor a partir desses campos. - Quando o stream termina de maneira limpa, o servidor posta um
Sair. Marque a entrada como offline. - Se o operador do servidor remover seu diretório do lado deles, o servidor posta um
Rejeitardo seu originalSeguir. Elimine a entrada: você não está mais autorizado a listar aquele servidor, e ele deixará de enviar pings para você.
Não há fluxo embutido para um servidor Owncast solicitar um lugar em seu diretório, então montar a lista é trabalho de seu lado. Uma maneira simples de deixar os operadores optarem por participar é colocar um formulário de submissão em seu diretório onde um operador insere a URL de seu servidor. Você e seu diretório decidem quais submissões listar e quais rejeitar. Quando você aceita uma, siga aquele servidor da mesma forma que acima. O operador aprova o follow, que um remetente estará esperando fazer, e o follow, aceitar e fluxo de pings lista seu stream.
Trate os pings como um sinal de vida. Se um servidor parar de enviar atividades Oferta sem um Sair, porque caiu, perdeu conectividade ou foi bloqueado por firewall, nada informa ativamente a você que ele ficou offline. Expire qualquer entrada de que você não ouviu em alguns intervalos de ping. O próprio diretório do Owncast marca um par offline após dois pings perdidos, cerca de 11 minutos, e executa essa verificação de obsolescência uma vez por minuto.
Algumas coisas que valem a pena acertar:
- Os campos de metadados vêm do servidor remoto, então trate-os como entrada não confiável. Limite os comprimentos e confirme que qualquer URL é
httpouhttpsantes de renderizá-la. O valor que você pode confiar é a URL do servidor que você escolheu seguir, não o nome exibido que o servidor envia. - As URLs da miniatura e do logo são estáveis, então o navegador as armazenará em cache. Anexe uma consulta que força a atualização ao atualizar uma entrada se você quiser que a prévia permaneça atual.
- Você não precisa usar os pings. Se você só precisa saber que um servidor ficou ao vivo, em vez de manter uma visão ativa de quem está ao vivo agora, siga o ator e fique de olho nas postagens de
Criar/Notade publicações ao vivo como qualquer outro consumidor do Fediverse.
Para que seu serviço seja reconhecido como um diretório, defina https://owncast.online/ns#directory como true no Seguir que você envia. Um servidor que o vê mantém o follow para seu operador e, uma vez aprovado, envia seus pings de stream para você.
Referência do endpoint
Todos os caminhos são relativos à URL base do servidor. Cada endpoint retorna 405 quando a federação está desativada.
| Caminho | Método | Propósito |
|---|---|---|
/.well-known/webfinger | GET | Resolver acct: → ator IRI |
/.well-known/host-meta | GET | Ponteiro XRD para WebFinger |
/.well-known/nodeinfo | GET | Documento de descoberta NodeInfo |
/nodeinfo/2.0 | GET | Metadados do servidor NodeInfo 2.0 |
/.well-known/x-nodeinfo2 | GET | metadados do servidor x-nodeinfo2 |
| /api/v1/instance | GET | Descrição da instância compatível com Mastodon |
/federation/user/{username} | GET | O documento ator Serviço |
/federation/user/{username}/inbox | POST | Entregar atividades ao servidor |
/federation/user/{username}/outbox | GET | Coleção de atividades que o servidor enviou |
/federation/user/{username}/followers | GET | Coleção de seguidores paginada |
/federation/user/{username}/following | GET | Sempre 404 (sem lista de seguidos) |
/federation/{object-id} | GET | Buscar um único objeto ActivityPub armazenado |
Construindo uma aplicação compatível — lista de verificação
Para seguir e consumir um stream do Owncast de sua própria aplicação:
- Resolva o handle com WebFinger (
acct:live@host) para obter o ator IRI, depois busque o ator comAccept: application/activity+json. - Publique seu próprio ator com uma
publicKey, servido via HTTPS, com umainboxacessível. - Envie um
Followassinado para ainboxdo ator. Assine(request-target) host date digestcom RSA e inclua umDigestSHA-256. - Lide com o
Acceptque o Owncast envia de volta para suainbox(modo público) — ou aguarde aprovação manual (modo privado). - Ouça por postagens go-live: atividades
Create/Notechegando na suainboxinformam que o stream começou; o link WebFingeralternate/application/x-mpegURLfornece a URL HLS para reprodução. - Opcionalmente atue como um diretório: defina
https://owncast.online/ns#directorycomotrueem seuFollow, faça o operador aprová-lo, então consuma os pingsOffer/Leavee os metadadoshttps://owncast.online/ns#*para presença em tempo real e entradas de diretório mais ricas. - Verifique a assinatura de tudo que o Owncast lhe envia em relação ao
#main-keydo ator.
Owncast accepts replies and mentions only as notifications for the operator and plugins: they are never threaded, displayed, or re-federated, and the server exposes no following list. Design your integration around following + notifications + likes/boosts rather than two-way conversation.
Improve this page
See something missing or incorrect? Edit this page and improve the documentation for everyone.
