项目背景:
像大多数软件开发人员一样,我依赖咖啡来让我继续运营,我的同事也是如此。我有一个旧的iPhone坐着,所以我决定向first webcam致敬并直播我的办公室咖啡壶。
该流已在我公司内受欢迎,所以我想确保它能够尽可能少地保持在线状态。截至目前,它偶尔会下降,我必须手动启动并再次运行。
我的设置:
我在数字海洋服务器上设置了nginx(我的nginx.conf如下所示),并为我的iPhone下载了一个rtmp流媒体应用程序。
手机设置为流式传输到example.com/live/stream
,然后我使用ffmpeg命令获取该流,剥离音频(直播是公共的,我不希望同事觉得他们必须是小心他们说的话),然后在rtmp://example.com/live/coffee
和example.com/hls/coffee.m3u8
上访问它。
由于我对ffmpeg不太熟悉,我不得不四处寻找合适的命令来剥离音频的咖啡流,我发现了这个:
ffmpeg -i rtmp://localhost/live/stream -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -f flv -an rtmp://localhost/live/coffee
基本上我对此命令的所有了解都是输入流来自localhost/live/stream
,它使用-an
剥离音频,然后输出到rtmp://localhost/live/coffee
。
我认为ffmpeg -i rtmp://localhost/live/stream -an rtmp://localhost/live/coffee
会产生相同的效果,但是我发现命令的页面正在处理ffmpeg和nginx,所以我认为额外的参数很有用。
我用这个命令注意到它会出错,将实时流关闭。我写了一个小的bash脚本,当它停止时重新运行命令,但我不认为这是最好的解决方案。
这是bash脚本:
while true;
do
ffmpeg -i rtmp://localhost/live/stream -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -f flv -an rtmp://localhost/live/coffee
echo 'Something went wrong. Retrying...'
sleep 1
done
我很好奇两件事:
由于我对nginx,ffmpeg和rtmp流媒体任何帮助都有接近0的经验,或者提示将不胜感激。
这是我的nginx.conf文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
allow 127.0.0.1;
}
location /stat.xsl {
root html;
}
location /hls {
root /tmp;
add_header Cache-Control no-cache;
}
location /dash {
root /tmp;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
}
}
rtmp {
server {
listen 1935;
chunk_size 4000;
application live {
live on;
hls on;
hls_path /tmp/hls;
dash on;
dash_path /tmp/dash;
}
}
}
编辑:
我也遇到了同样的问题:https://trac.ffmpeg.org/ticket/4401