lala.im:使用AzuraCast和FFmpeg在YouTube上创建在线音乐电台

運維技術·軟件/源碼·lala.im · 2022-07-23 · 113 人浏览

原文地址:https://lala.im/8417.html,請支持原作者!該處僅作轉載。

机器我这里使用的是甲骨文的免费arm,系统我自己重装成debian11了,下面的步骤都基于这个系统。
首先安装需要用到的一些软件包:

apt -y update
apt -y install nginx python3-certbot-nginx ffmpeg tmux curl

安装azuracast,这里直接用azuracast官方的docker实用脚本来安装:

mkdir -p /var/azuracast
cd /var/azuracast
curl -fsSL https://raw.githubusercontent.com/AzuraCast/AzuraCast/main/docker.sh > docker.sh
chmod a+x docker.sh
./docker.sh install

如果你的系统上没有安装docker和docker-compose,这个脚本会在安装过程中帮你安装,同时会询问你如下问题:

Docker does not appear to be installed. Install Docker now? [Y/n] y
Docker Compose does not appear to be installed. Install Docker Compose now? [Y/n] y
Your current release channel is 'Rolling Release'. Switch to 'Stable' release channel? [y/N] n

除了询问上面的问题,在安装过程中还会让你选择程序使用的语言,使用的端口号等,默认情况下azuracast会占用80和443端口,这样不太方便,如果机器内有其他web服务的话会产生冲突,所以这里我把对应的80和443端口修改成10080和10443了。如果你在安装过程中没有这样做,也可以在安装完成后执行下面的命令来修改:

cd /var/azuracast
./docker.sh update-self
./docker.sh change-ports

其他的端口比如sftp的2022端口,以及电台的8000-8499端口保持默认的配置不做修改。
接下来配置反向代理,新建nginx配置文件:

nano /etc/nginx/conf.d/azuracast.conf

写入如下配置:

server {
    listen       80;
    server_name  azuracast.example.com;
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:10080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

签发ssl证书:

certbot --nginx

打开azuracast的页面创建管理员账号登录进去,在系统设置这里,一定要勾选如图所示的选项:

範例
然后就是创建电台什么的,这些就不多说了,创建好电台后可以在如下图所示的页面上传你的音乐文件:

範例
现在就可以开始广播了,启动广播后,在电台的首页可以看到这个界面,:

範例
复制这个mp3结尾的网址,待会用ffmpeg推流的时候需要用到。现在用tmux新建一个会话:

tmux new -s ffmpeg

在会话里执行如下命令开始向youtube推流:

ffmpeg \
-stream_loop -1 \
-re \
-i "example.mp4" \
-stream_loop -1 \
-re \
-thread_queue_size 512 \
-i "https://azuracast.example.com/listen/imlala/radio.mp3" \
-map 0:v -map 1:a \
-c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 \
-c:a aac -b:a 128k -ac 2 -ar 44100 \
-f flv rtmp://a.rtmp.youtube.com/live2/streamkey

这个命令带有很多选项和参数,这里我只说一下需要改动的位置。
首先有两个作为输入的源,第一个就是视频源,第二个就是刚才azuracast上面的音频源:

-i "example.mp4"
-i "https://azuracast.example.com/listen/imlala/radio.mp3"

视频文件随便找个就行,传到机器内即可,另外视频有没有声音都无所谓,因为接下来的参数:

-map 0:v -map 1:a

把视频里面的音频替换成azuracast的了。
最后修改一下推流的地址和key即可:

rtmp://a.rtmp.youtube.com/live2/streamkey

实际上除了youtube,你也可以推流到twitch等平台,都是可行的。但是这里我不得不提醒一下的是youtube的版权真的很严格,如果你在youtube播音乐,大概率被禁播。别说音乐了就是画面上带个tvb电视台的台标,youtube也能给你禁播。。我自己就播了一会儿就收到各种版权主张的邮件了,然后就被ban了:

範例
最后没办法就在自建的peertube上播了,效果还可以:

参考文献:
https://stackoverflow.com/questions/11779490/how-to-add-a-new-audio-not-mixing-into-a-video-using-ffmpeg\nhttps://superuser.com/questions/1137612/ffmpeg-replace-audio-in-video\nhttps://stackoverflow.com/questions/65041956/ffmpeg-looping-an-video-audio-stream-to-youtube-live\nhttps://trac.ffmpeg.org/wiki/EncodingForStreamingSites\nhttps://docs.azuracast.com/en/getting-started/installation/docker

運維技術 軟件/源碼 lala.im
Theme Jasmine by Kent Liao