<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matheus Torres</title>
    <description>The latest articles on DEV Community by Matheus Torres (@matheustmendes_).</description>
    <link>https://dev.to/matheustmendes_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3231343%2F7de88c20-ad48-4a8a-afcd-489b701b20d5.png</url>
      <title>DEV Community: Matheus Torres</title>
      <link>https://dev.to/matheustmendes_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matheustmendes_"/>
    <language>en</language>
    <item>
      <title>Como apliquei POO em um projeto pessoal pequeno: um estudo de caso de um Console App C#</title>
      <dc:creator>Matheus Torres</dc:creator>
      <pubDate>Mon, 09 Jun 2025 03:23:09 +0000</pubDate>
      <link>https://dev.to/matheustmendes_/como-apliquei-poo-em-um-projeto-pessoal-pequeno-um-estudo-de-caso-de-um-console-app-c-4jo9</link>
      <guid>https://dev.to/matheustmendes_/como-apliquei-poo-em-um-projeto-pessoal-pequeno-um-estudo-de-caso-de-um-console-app-c-4jo9</guid>
      <description>&lt;h1&gt;
  
  
  Como apliquei POO em um projeto pessoal pequeno: um estudo de caso de um Console App C\
&lt;/h1&gt;

&lt;h2&gt;
  
  
  ✨ Introdução
&lt;/h2&gt;

&lt;p&gt;Ao aprender C# e me aprofundar no ecossistema .NET, decidi iniciar um projeto pessoal simples: um &lt;strong&gt;simulador de blog em formato Console App&lt;/strong&gt;. A ideia era desenvolver uma aplicação que permitisse adicionar, listar, atualizar e remover posts, já com a visão futura de transformá-la em uma aplicação web fullstack usando &lt;strong&gt;ASP.NET Core&lt;/strong&gt; no backend e &lt;strong&gt;Angular&lt;/strong&gt; no frontend.&lt;/p&gt;

&lt;p&gt;O que mais me surpreendeu é que, mesmo em um projeto pequeno, acabei aplicando diversos conceitos fundamentais de &lt;strong&gt;Programação Orientada a Objetos (POO)&lt;/strong&gt;. Neste artigo, compartilho esse estudo de caso, explicando como cada conceito foi usado na prática.&lt;/p&gt;




&lt;h2&gt;
  
  
  🪡 Contexto do projeto
&lt;/h2&gt;

&lt;p&gt;O projeto consiste em:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um modelo de dados chamado &lt;code&gt;Post&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Um serviço chamado &lt;code&gt;PostService&lt;/code&gt; que realiza operações CRUD&lt;/li&gt;
&lt;li&gt;Um menu de interação no &lt;code&gt;Program.cs&lt;/code&gt; que atua como interface de texto&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Encapsulamento
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Encapsulamento&lt;/strong&gt; é o conceito de proteger os dados internos de um objeto, expondo apenas o necessário através de métodos públicos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Onde usei:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Na classe &lt;code&gt;Post&lt;/code&gt;, onde os dados são representados como propriedades com &lt;code&gt;get; set;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;PostService&lt;/code&gt;, a lista interna de posts é privada e só pode ser manipulada por métodos como &lt;code&gt;AddPost()&lt;/code&gt;, &lt;code&gt;RemovePost()&lt;/code&gt; e &lt;code&gt;UpdatePost()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt; &lt;span class="c1"&gt;// encapsulada dentro do serviço&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Abstração
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Abstração&lt;/strong&gt; é sobre esconder detalhes complexos e mostrar apenas o essencial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Onde usei:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Program.cs&lt;/code&gt; não acessa diretamente a lista de posts, ele apenas chama os métodos de &lt;code&gt;PostService&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A lógica de como os posts são armazenados, buscados ou editados fica escondida dentro do serviço&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso separa bem a responsabilidade entre &lt;strong&gt;interface com o usuário&lt;/strong&gt; e &lt;strong&gt;lógica de negócio&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏢 Responsabilidade Única (SRP)
&lt;/h2&gt;

&lt;p&gt;Cada classe no projeto tem uma única responsabilidade:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Classe&lt;/th&gt;
&lt;th&gt;Responsabilidade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Post&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Representar os dados de um post&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PostService&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gerenciar a lógica de negócio e CRUD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Program.cs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gerenciar o menu e entrada do usuário&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Essa separação facilita testes, manutenção e futura expansão para API.&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💼 Instanciação de objetos
&lt;/h2&gt;

&lt;p&gt;Criei objetos com &lt;code&gt;new&lt;/code&gt; a partir das classes, como por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criar um post:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Post&lt;/span&gt; &lt;span class="n"&gt;newPost&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Post&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt; &lt;span class="n"&gt;Content&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt; &lt;span class="n"&gt;Author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Usar o serviço:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;PostService&lt;/span&gt; &lt;span class="n"&gt;postService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PostService&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🌐 Próximos passos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Migrar este projeto para ser uma API ASP.NET&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  * Criar interface Angular para consumir a API
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🚀 Conclusão
&lt;/h2&gt;

&lt;p&gt;Mesmo em um projeto simples e pequeno, consegui aplicar de forma natural os principais conceitos de &lt;strong&gt;programação orientada a objetos&lt;/strong&gt;. Isso me mostrou que entender bem POO é uma base essencial para crescer como desenvolvedor.&lt;/p&gt;

&lt;p&gt;Esse projeto ainda vai evoluir para algo maior (uma aplicação fullstack), mas já me deu uma base sólida e realista sobre boas práticas de organização de código.&lt;/p&gt;




&lt;p&gt;Se você estiver aprendendo C# ou iniciando na carreira, recomendo fortemente começar com algo pequeno, mas bem estruturado. A experiência de aplicar POO na prática faz toda a diferença!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Repositório&lt;/strong&gt;: &lt;a href="https://github.com/matheustmendes/PortfolioBlog" rel="noopener noreferrer"&gt;PortfolioBlog no GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>console</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Criando um Servidor de Streaming 24/7: Parte 3 - Codificação e Entrega com FFPlayout e Nginx</title>
      <dc:creator>Matheus Torres</dc:creator>
      <pubDate>Sat, 31 May 2025 17:16:22 +0000</pubDate>
      <link>https://dev.to/matheustmendes_/criando-um-servidor-de-streaming-247-parte-3-codificacao-e-entrega-com-ffplayout-e-nginx-3dlh</link>
      <guid>https://dev.to/matheustmendes_/criando-um-servidor-de-streaming-247-parte-3-codificacao-e-entrega-com-ffplayout-e-nginx-3dlh</guid>
      <description>&lt;p&gt;Após superar os desafios com o MediaMTX, veio uma fase mais tranquila — mas nem por isso menos interessante. Era hora de colocar os vídeos no ar e entregá-los ao público, com qualidade e estabilidade.&lt;/p&gt;

&lt;p&gt;🎞️ Codificação com FFPlayout + FFmpeg&lt;/p&gt;

&lt;p&gt;O FFPlayout foi a ferramenta escolhida para gerenciar as playlists e codificar os vídeos. Apesar de eu já ter ouvido falar do FFmpeg, nunca havia mexido diretamente com ele em um fluxo de produção.&lt;/p&gt;

&lt;p&gt;O desafio aqui foi entender e configurar corretamente os parâmetros do FFmpeg:&lt;/p&gt;

&lt;p&gt;ffmpeg -re -i input.mp4 \&lt;br&gt;
  -c:v libx264 -preset veryfast -tune zerolatency \&lt;br&gt;
  -c:a aac -f flv rtmp://localhost:1935/live/canal1&lt;/p&gt;

&lt;p&gt;Com a ajuda da documentação, fui aprendendo o significado de cada flag:&lt;/p&gt;

&lt;p&gt;-re: simula reprodução em tempo real&lt;/p&gt;

&lt;p&gt;-preset veryfast: equilibra qualidade e performance&lt;/p&gt;

&lt;p&gt;-tune zerolatency: otimiza para streaming ao vivo&lt;/p&gt;

&lt;p&gt;Testar os resultados e ver o MediaMTX recebendo o fluxo foi um daqueles momentos de empolgação genuína:&lt;/p&gt;

&lt;p&gt;[RTMP] [conn 127.0.0.1:XXXXX] is publishing to path 'live/canal1'&lt;/p&gt;

&lt;p&gt;🌐 Entrega ao público com Nginx&lt;/p&gt;

&lt;p&gt;Com o servidor gerando o HLS corretamente, era hora de servir os arquivos para fora. A missão agora era configurar o Nginx como proxy reverso, apontando para o domínio tv.lftv.com.br.&lt;/p&gt;

&lt;p&gt;Essa parte teve dois grandes focos:&lt;/p&gt;

&lt;p&gt;Fazer o Nginx redirecionar os acessos para o MediaMTX na porta 8888&lt;/p&gt;

&lt;p&gt;Garantir que tudo estivesse protegido com HTTPS&lt;/p&gt;

&lt;p&gt;Configuração básica do proxy:&lt;/p&gt;

&lt;p&gt;server {&lt;br&gt;
    listen 80;&lt;br&gt;
    server_name xxx;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;location /hls/ {
    proxy_pass http://localhost:8888/hls/;
    add_header Access-Control-Allow-Origin "$http_origin" always;
    add_header Access-Control-Allow-Credentials true;
    add_header Access-Control-Allow-Methods "GET, OPTIONS";
    proxy_buffering off;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Ativando HTTPS com Certbot e Let's Encrypt:&lt;/p&gt;

&lt;p&gt;sudo apt install certbot python3-certbot-nginx&lt;br&gt;
sudo certbot --nginx -d dominio&lt;/p&gt;

&lt;p&gt;Em poucos minutos, o domínio estava pronto para transmitir com segurança.&lt;/p&gt;

&lt;p&gt;🔐 Os desafios do CORS&lt;/p&gt;

&lt;p&gt;Apesar do setup HTTPS ter sido facilitado por automação, configurar o CORS (Cross-Origin Resource Sharing) foi mais delicado. Players em smart TVs (como WebOS ou Tizen) exigem permissões específicas, e o uso de credentials: true exige Access-Control-Allow-Origin dinâmico:&lt;/p&gt;

&lt;p&gt;add_header 'Access-Control-Allow-Origin' "$http_origin" always;&lt;br&gt;
add_header 'Access-Control-Allow-Credentials' 'true';&lt;/p&gt;

&lt;p&gt;Demorei até encontrar essa combinação estável, mas quando consegui, todos os players passaram a tocar o conteúdo sem bloqueios.&lt;/p&gt;

&lt;p&gt;Essa etapa consolidou o pipeline do streaming, do vídeo até o navegador. Cada peça foi conectada com cuidado, e o resultado era visível: o canal estava no ar 24/7.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>nginx</category>
      <category>linux</category>
      <category>ffmpeg</category>
    </item>
    <item>
      <title>Criando um Servidor de Streaming 24/7: Parte 2 - Os desafios com o MediaMTX</title>
      <dc:creator>Matheus Torres</dc:creator>
      <pubDate>Sat, 31 May 2025 17:15:16 +0000</pubDate>
      <link>https://dev.to/matheustmendes_/criando-um-servidor-de-streaming-247-parte-2-os-desafios-com-o-mediamtx-1ab3</link>
      <guid>https://dev.to/matheustmendes_/criando-um-servidor-de-streaming-247-parte-2-os-desafios-com-o-mediamtx-1ab3</guid>
      <description>&lt;p&gt;A etapa seguinte foi uma das mais frustrantes de toda a jornada: configurar o MediaMTX corretamente. Mesmo sendo uma ferramenta poderosa, a documentação limitada e a extrema sensibilidade a erros de configuração tornaram essa fase um verdadeiro teste de paciência.&lt;/p&gt;

&lt;p&gt;🧱 O início com o MediaMTX&lt;/p&gt;

&lt;p&gt;O MediaMTX (anteriormente rtsp-simple-server) era perfeito para o que eu precisava: receber RTMP, gerar HLS, e ainda oferecer suporte a SRT. Baixei a versão estável, instalei e... nada funcionava direito.&lt;/p&gt;

&lt;p&gt;A única referência oficial era um arquivo gigantesco de configuração em YAML no repositório do GitHub. Sem muitos comentários ou explicações, era um território difícil de navegar.&lt;/p&gt;

&lt;p&gt;⚠️ O terror do YAML&lt;/p&gt;

&lt;p&gt;Cometi inúmeros erros por causa de:&lt;/p&gt;

&lt;p&gt;Espaços mal posicionados (YAML é extremamente sensível)&lt;/p&gt;

&lt;p&gt;Estruturas mal interpretadas (ex: tentar usar hls: como objeto ao invés de enable: yes)&lt;/p&gt;

&lt;p&gt;Tipos errados (booleanos confundidos com strings)&lt;/p&gt;

&lt;p&gt;Resultado: o serviço falhava silenciosamente ou emitia erros vagos nos logs.&lt;/p&gt;

&lt;p&gt;Com o tempo, aprendi a consultar constantemente os logs com:&lt;/p&gt;

&lt;p&gt;tail -f /var/log/mediamtx/mediamtx.log&lt;/p&gt;

&lt;p&gt;E corrigir a configuração. Um exemplo funcional mínimo:&lt;/p&gt;

&lt;p&gt;rtmp:&lt;br&gt;
  enable: yes&lt;/p&gt;

&lt;p&gt;hls:&lt;br&gt;
  enable: yes&lt;br&gt;
  segmentCount: 7&lt;br&gt;
  segmentDuration: 2s&lt;br&gt;
  partDuration: 0&lt;/p&gt;

&lt;p&gt;🧪 O mistério do LL-HLS&lt;/p&gt;

&lt;p&gt;Mesmo após tudo parecer configurado corretamente, notei um comportamento estranho: o player apresentava travamentos e alto uso de CPU. Depois de horas investigando, descobri que o modo LL-HLS (Low-Latency HLS) vinha ativado por padrão no MediaMTX.&lt;/p&gt;

&lt;p&gt;Esse modo não se adequava à minha infraestrutura e gerava gargalos sérios.&lt;/p&gt;

&lt;p&gt;A solução foi explícita:&lt;/p&gt;

&lt;p&gt;hls:&lt;br&gt;
  variant: mpegts&lt;/p&gt;

&lt;p&gt;Forçar o modo clássico de segmentação (mpegts) fez o LL-HLS sumir!&lt;/p&gt;

&lt;p&gt;"HLS listener opened on :8888"&lt;/p&gt;

&lt;p&gt;sem erros, foi um alívio indescritível.&lt;/p&gt;

&lt;p&gt;No próximo post, explico como configurei o FFPlayout para transmitir os vídeos e como usei Nginx como proxy reverso — incluindo as dores (e soluções) com CORS e HTTPS.&lt;/p&gt;

</description>
      <category>mediamtx</category>
      <category>hls</category>
      <category>yaml</category>
      <category>ffmpeg</category>
    </item>
    <item>
      <title>Criando um Servidor de Streaming 24/7: Parte 1 - Infraestrutura Inicial</title>
      <dc:creator>Matheus Torres</dc:creator>
      <pubDate>Sat, 31 May 2025 17:14:22 +0000</pubDate>
      <link>https://dev.to/matheustmendes_/criando-um-servidor-de-streaming-247-parte-1-infraestrutura-inicial-47jl</link>
      <guid>https://dev.to/matheustmendes_/criando-um-servidor-de-streaming-247-parte-1-infraestrutura-inicial-47jl</guid>
      <description>&lt;h1&gt;
  
  
  Criando um Servidor de Streaming 24/7: Parte 1 - Infraestrutura Inicial
&lt;/h1&gt;

&lt;p&gt;Este é o primeiro post de uma série sobre como criei, passo a passo, um servidor completo de streaming 24/7, usando FFPlayout, MediaMTX e Nginx. Além da parte técnica, compartilho também os desafios reais e aprendizados que surgiram durante o processo.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚩 A ideia inicial e escolha da VPS
&lt;/h2&gt;

&lt;p&gt;Tudo começou com uma tarefa aparentemente simples: colocar no ar um canal de TV online para transmitir conteúdos pré-gravados e eventualmente fazer transmissões ao vivo. Eu já tinha experiência com edição de vídeos e conhecia o básico do FFPlayout, mas nunca havia montado um servidor completo, muito menos configurado um serviço de streaming do zero.&lt;/p&gt;

&lt;p&gt;Meu primeiro grande desafio foi escolher a infraestrutura. Inicialmente testei algumas opções na AWS, mas logo percebi que o custo para manter portas abertas e garantir performance ficaria acima do meu orçamento inicial.&lt;/p&gt;

&lt;p&gt;Depois de pesquisar bastante, encontrei uma opção acessível na Contabo com as seguintes especificações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 vCPUs&lt;/li&gt;
&lt;li&gt;12 GB RAM&lt;/li&gt;
&lt;li&gt;500 GB SSD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Era exatamente o que eu precisava para ter liberdade de experimentar sem me preocupar com custos inesperados.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Desbravando o Ubuntu
&lt;/h2&gt;

&lt;p&gt;Instalei o Ubuntu Server 22.04 LTS e parti para a configuração inicial, que envolveu abrir portas específicas no firewall:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 1935/tcp   &lt;span class="c"&gt;# RTMP&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 8888/tcp   &lt;span class="c"&gt;# HLS&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 8890/udp   &lt;span class="c"&gt;# SRT&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essas portas seriam essenciais para o funcionamento dos protocolos que eu pretendia usar (RTMP, HLS e SRT).&lt;/p&gt;

&lt;p&gt;Aprendi também a usar &lt;code&gt;systemd&lt;/code&gt; para criar serviços que mantivessem meus aplicativos rodando automaticamente após reinicializações do servidor. Foi uma experiência nova e, de certa forma, assustadora lidar com arquivos de serviço e permissões pela primeira vez.&lt;/p&gt;

&lt;p&gt;Exemplo básico da criação do serviço para o MediaMTX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[Unit]&lt;/span&gt;
&lt;span class="py"&gt;Description&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;MediaMTX Streaming Server&lt;/span&gt;
&lt;span class="py"&gt;After&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;network.target&lt;/span&gt;

&lt;span class="nn"&gt;[Service]&lt;/span&gt;
&lt;span class="py"&gt;User&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;stream&lt;/span&gt;
&lt;span class="py"&gt;ExecStart&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/usr/local/bin/mediamtx /etc/mediamtx/mediamtx.yml&lt;/span&gt;
&lt;span class="py"&gt;Restart&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;always&lt;/span&gt;

&lt;span class="nn"&gt;[Install]&lt;/span&gt;
&lt;span class="py"&gt;WantedBy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;multi-user.target&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📌 Primeiros aprendizados
&lt;/h2&gt;

&lt;p&gt;Cada pequeno erro gerava um aprendizado, e cada vitória, uma celebração pessoal. Rapidamente percebi que escolher o provedor certo (no meu caso, a Contabo) fez toda a diferença no quanto eu pude explorar e aprender sem barreiras.&lt;/p&gt;

&lt;p&gt;Essa primeira fase, apesar de ser apenas a fundação, foi crucial para tudo o que veio a seguir.&lt;/p&gt;




&lt;p&gt;No próximo post, conto como enfrentei o desafio do MediaMTX, incluindo problemas complicados com YAML e configurações padrão que quase sabotaram todo o projeto.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>linux</category>
      <category>infrastructureascode</category>
      <category>vps</category>
    </item>
  </channel>
</rss>
