如何将 ffmpeg 流中的音频传输到 nginx rtmp 服务器?

Posted

技术标签:

【中文标题】如何将 ffmpeg 流中的音频传输到 nginx rtmp 服务器?【英文标题】:How can I get audio in my ffmpeg stream to nginx rtmp server? 【发布时间】:2013-12-11 02:52:18 【问题描述】:

我目前有一个 nginx 服务器设置,带有用于视频流的 rtmp 插件。我正在使用 ffmpeg 流式传输到它,然后使用 adobe flash player 在网络浏览器上显示流。

我已成功播放视频,但无法获取音频。

这是我用来启动流的 ffmpeg 命令

ffmpeg -f video4linux2 -s 320x240 -r 16 -i /dev/video0 -f alsa -i hw:0 -an -f flv rtmp://123.456.789.51:31002/rover/mystream

流然后转到在这个 conf 文件上运行的 nginx

worker_processes  1;

error_log  logs/user/error.log debug;

events 
    worker_connections  1024;


rtmp 
    server 
        listen 31002;

        application rover 
            live on;
            #meta copy;
            #interleave on;
            allow publish all;
            allow play all;

            hls on;
            #record keyframes;
            #record_path /tmp;
            #record_max_size 128K;
            #record_interval 30s;
            #record_suffix .this.is.flv;

            #on_publish http://localhost:8080/publish;
            #on_play http://localhost:8080/play;
            #on_record_done http://localhost:8080/record_done;
        
    


http 
    server 
        listen      26360;

        location /stat 
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        

        location /stat.xsl 
            root nginx-rtmp-module-master/;
        

        location /control 
            rtmp_control all;
        

        #location /publish 
        #    return 201;
        #

        #location /play 
        #    return 202;
        #

        #location /record_done 
        #    return 203;
        #

        location /rtmp-publisher 
            root /path/to/test;
        

        location / 
            root nginx-rtmp-module-master/test/www;
        
    

然后,我使用 adobe flash 播放器和 strobe 媒体播放器的此设置从浏览器访问流。

<object  >
    <param name="movie" value="http://osmf.org/dev/2.0gm/StrobeMediaPlayback.swf">
    </param>
    <param name="flashvars" value="src=rtmp%3A%2F%2F184.173.103.51%3A31002%2Frover%2Fmystream&autoPlay=true"></param>
    <param name="allowFullScreen" value="true"></param>
    <param name="allowscriptaccess" value="always"></param>
    <param name="wmode" value="direct"></param>
    <embed src="http://osmf.org/dev/2.0gm/StrobeMediaPlayback.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="direct"   flashvars="src=rtmp%3A%2F%2F184.173.103.51%3A31002%2Frover%2Fmystream&autoPlay=true"></embed>
</object>

我可以就我无法获得音频的原因获得一些建议吗?我正在从我的网络摄像头流式传输视频并从我的麦克风指定音频。

【问题讨论】:

【参考方案1】:

你知道 ffmpeg 中的“-an”选项是什么吗?如果你想要音频,你不应该使用它。

【讨论】:

这是导致 OP 问题的原因吗? 是的,我想是的。 -an 告诉 ffmpeg 忽略音频

以上是关于如何将 ffmpeg 流中的音频传输到 nginx rtmp 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在服务器上使用 ffmpeg 从 WebRTC 流中获取音频和视频

如何使用 FFMPEG 和 C 将音频和视频写入同一个文件?

将音频和视频块从 python 中传输到 ffmpeg 的最佳方法

将麦克风从客户端浏览器流式传输到远程服务器,并将音频实时传递到 ffmpeg 以与第二个视频源结合

将音频流式传输到多个 Web 浏览器

使用 FFMPEG 流式传输 YouTube 音频的示例