MAC 本地搭建推流环境、推流及实现 iOS demo 拉流浏览

2,914 阅读3分钟

废话开篇:本文主要是针对推流环境傻瓜式安装及简单的手机在线拉流浏览操作。仅仅是个流程及注意事项而没有什么特别高的技术难点。

步骤一、安装 nginx

电脑首先需要安装 brew ,相信大家都有,如果没有运行如下命令进行安装(卸载)

//安装
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
//卸载
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

利用 brew 安装 nginx

//最新安装路径
$ brew tap denji/homebrew-nginx
//安装 nginx 及 rtmp
$ brew install nginx-full --with-rtmp-module
//启动 nginx 
$ nginx

在地址栏里输入:http://localhost:8080 ,输入如下:

image.png

好了, nginx 安装并正在运行了。

一些其他的 nginx 命令,后面因为需要修改一下 rtmp 配置,所以,需要用到重新加载配置文件的 nginx -s reload 命令。

//查看Nginx信息
$ brew info nginx-full
//重新加载配置文件
$ nginx -s reload
//再次打开配置文件
$ nginx -s reopen
//停止服务器
$ nginx -s stop
//退出服务器
$ nginx -s quit

步骤二、修改一下 rtmp 配置

前往文件夹输入如下路径

/usr/local/etc/nginx/nginx.conf

image.png

找到 nginx.conf 文件

image.png

用文本编辑器打开 nginx.conf 文件,在内容的最后面加入如下配置

rtmp {
    server {
        listen 1935;//端口号
        application live1 {//live1 随便起,后面的拉流的时候保持一致即可
            live on;
            record off;
        }
    }
}

修改后如图

image.png

在终端中重新加载一下 nginx 配置,这里的路径下 1.19.10 注意需要输入当前本地的版本号

/usr/local/Cellar/nginx-full/1.19.10/bin/nginx -s reload

步骤三、安装 ffmpeg

输入如下终端命令 ,体积大小约为 50M,耐心等待安装完。

brew install ffmpeg

步骤四、准备推流

这里,先录一段视频,保存在一个命名为 push 临时文件夹里,

image.png cd 到当前文件夹,执行如下命令

ffmpeg -re -i ./test1.mp4 -vcodec copy -f flv rtmp://localhost:1935/live1/room

上面的命令就是进行推流,./test.mov 是文件夹里保存的录屏文件, rtmp://localhost:1935/live1/room ,生成拉流地址,这里的 live1 就是之前在 nginx 配置文件里要记住的名字,后面的 room,随便起,后面拉流地址用的时候保持一致即可。

运行如下

image.png

推流到录制的视频结束后,推流操作会自动停止。

为了判断是否真的推流成功,下载一个 VLC 工具,进行拉流地址的播放。

image.png

可以看到用 VLC 工具,可以进行播放了。

屏幕录制2021-11-11 上午11.32.06.gif

步骤五、手机进行拉流

这里 iOS 用的是腾讯云拉流 SDKpodfile 里添加如下依赖项

pod 'TXLiteAVSDK_Professional'

声明拉流属性

@property (nonatomic,strong) V2TXLivePlayer * livePlayer;

@property (nonatomic,strong) TXView * txView;

进行拉流

    //TXView 这里仅仅是 UIView 的别名,这里用来挂载流视频
    self.txView = [[TXView alloc] init];

    self.txView.frame = CGRectMake(0, 100, self.view.width, 300);

    [self.view addSubview:self.txView];
    
    //流视频拉取类
    self.livePlayer = [[V2TXLivePlayer alloc] init];
    //设置视频填充效果
    V2TXLiveCode fillLiveCode = [self.livePlayer setRenderFillMode:(V2TXLiveFillModeFit)];

    NSLog(@"fillLiveCode = %ld",(long)fillLiveCode);
    //添加观察者,监听一下用户操作及视频状态变更
    [self.livePlayer setObserver:self];
    
    //进行流视频挂载
    V2TXLiveCode renderCode = [self.livePlayer setRenderView:self.txView];

    NSLog(@"renderCode = %ld",renderCode);
    //拉流地址,本地地址(局域网下)
    NSString* url = @"rtmp://10.10.60.20:1935/live1/room";
    //开始拉流直播
    V2TXLiveCode liveCode = [self.livePlayer startPlay:url];

    NSLog(@"liveCode = %ld",liveCode);

运行,发现是白屏,没有视频流,如图。这里需要 MAC 电脑关闭一下防火墙。

白屏警告

image.png

关闭防火墙

image.png

再试一次:

test1.gif

好了,demo 也能获取拉流视频了。

这里没有什么复杂的东西,记下流水帐,熟悉一下过程。代码拙劣,大神勿笑。