美文网首页
FFmpeg rtmp mac直播推流

FFmpeg rtmp mac直播推流

作者: rome753 | 来源:发表于2022-05-08 11:32 被阅读0次

    ffmpeg命令行可以很方便地进行rtmp直播推流。

    1 安装nginx服务

    注意不能直接安装,一定要安装带rtmp模块的,否则会报rtmp找不到的错误。

    安装有两种方式,一是自己编译安装,我没有采用;另一种是安装配置好的,用下面这篇教程的方法:
    https://www.jianshu.com/p/cff04bb3c182
    这两句命令即可安装成功,很方便。

    brew tap denji/homebrew-nginx
    brew install nginx-full --with-rtmp-module
    

    启动
    安装后用 nginx 命令即可启动,打开浏览器输入 localhost:8080 可以看到网页。

    配置rtmp
    修改 nginx.conf 文件,在 /opt/homebrew/etc/nginx/nginx.conf 这个位置
    在里面加上rtmp配置,表示监听1935端口,服务名是live,rtmp推流地址是
    rtmp://127.0.0.1:1935/live

    ...
    events {
        worker_connections  1024;
    }
    
    rtmp {
        server {
            listen 1935;
            chunk_size 4096;
            application live {
                live on;
            }
        }
    
    }
    
    http {
    ...
    

    2 视频文件推流

    先推个视频文件试试,找个flv格式视频(没有的话用ffmpeg转一个),这样可以直接推流了
    ffmpeg -re -i 001.flv -f flv rtmp://127.0.0.1:1935/live

    播放
    本机播放:用ffplay
    ffplay rtmp://127.0.0.1:1935/live

    局域网播放:查一下本机局域网地址,我的是192.168.3.9,找一个流媒体播放器(电脑端可以用vlc播放器,移动端市场搜一下播放器有很多),在同一WIFI下输入地址rtmp://192.168.3.9:1935/live就可以播放

    3 摄像头/屏幕推流

    上一篇ffmpeg mac录屏介绍了用ffmpeg录制mac电脑摄像头的命令
    ffmpeg -video_size 1280x720 -framerate 30 -f avfoundation -i "0:0" output.mkv
    把它稍微修改一下,把输出文件 output.mkv 换成推流地址试试
    ffmpeg -video_size 1280x720 -framerate 30 -f avfoundation -i "0:0" rtmp://127.0.0.1:1935/live

    发现会报两个错误,一是图像格式不对,二是找不到输出格式

    [avfoundation @ 0x12f809e00] Selected pixel format (yuv420p) is not supported by the input device.
    [avfoundation @ 0x12f809e00] Supported pixel formats:
    [avfoundation @ 0x12f809e00]   uyvy422
    [avfoundation @ 0x12f809e00]   yuyv422
    [avfoundation @ 0x12f809e00]   nv12
    [avfoundation @ 0x12f809e00]   0rgb
    [avfoundation @ 0x12f809e00]   bgr0
    [avfoundation @ 0x12f809e00] Overriding selected pixel format to use uyvy422 instead.
    
    [NULL @ 0x12880cc00] Unable to find a suitable output format for 'rtmp://127.0.0.1:1935/live'
    rtmp://127.0.0.1:1935/live: Invalid argument
    

    -pixel_format uyvy422 设置需要的图像格式,用-f flv指定输出格式
    ffmpeg -video_size 1280x720 -framerate 30 -f avfoundation -pixel_format uyvy422 -i "0:0" -f flv rtmp://127.0.0.1:1935/live
    加上这两个参数运行后变成另一个错误了:

    Input #0, avfoundation, from '0:0':
      Duration: N/A, start: 208627.169433, bitrate: N/A
        Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 1280x720, 30 tbr, 1000k tbn, 1000k tbc
        Stream #0:1: Audio: pcm_f32le, 48000 Hz, mono, flt, 1536 kb/s
    [adpcm_swf @ 0x12f80ec00] Sample rate must be 11025, 22050 or 44100
    

    这是说音频采样率不对,硬件输入的是48000的音频,而编解码只支持 11025, 22050 or 44100 这几种,那么用-ar 44100指定一下音频采样率,注意它的位置要放到"0:0"后面
    ffmpeg -video_size 1280x720 -framerate 30 -f avfoundation -pixel_format uyvy422 -i "0:0" -ar 44100 -f flv rtmp://127.0.0.1:1935/live
    这样可以成功推流了!用播放器可以实时观看摄像头画面。

    把参数"0:0"换成"1:0",表示用屏幕内容推流,可以实时播放屏幕内容,相当于投屏了。

    ffmpeg 命令行功能非常强大,它的参数很容易更换,并且能准确报错,说明它的设计非常严谨合理。

    推流播放有一个问题,声音很小,在手机上播放完全没有声音,可能是编解码格式导致的。我看的几乎所有博客都用了x264编解码器,我暂时没编译安装,等以后装好了再试试。

    相关文章

      网友评论

          本文标题:FFmpeg rtmp mac直播推流

          本文链接:https://www.haomeiwen.com/subject/zitqurtx.html