ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FFmpeg-rtmp-mac直播推流

2022-07-18 17:35:04  阅读:228  来源: 互联网

标签:FFmpeg mac avfoundation live rtmp 1935 推流 ffmpeg


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,mac,avfoundation,live,rtmp,1935,推流,ffmpeg
来源: https://www.cnblogs.com/rome753/p/16491258.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有