文章目录
- 一、推流和拉流简介
- 1、直播推流和拉流操作
- 2、直播推流和拉流涉及到的软件
- 3、推流 -> 拉流 流程
- 二、流媒体服务器搭建
- 1、相关文件准备
- 2、创建 ECS 云服务器实例
- 3、配置安全组
- 4、使用 WinSCP 上传流媒体服务器软件及配置脚本
- 5、使用 SecureCRT 连接服务器
- 6、搭建流媒体服务器
- 三、使用 ffmpeg 命令进行推流操作
- 四、使用 ffplay 命令进行拉流操作
- 五、使用 ffmpeg 命令进行拉流操作
博客总结 :
- ffmpeg 推流命令 :
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://39.105.129.233/myapp/
- ffplay 拉流命令 :
ffplay rtmp://39.105.129.233/myapp/
- ffmpeg 拉流命令 :
ffmpeg -i rtmp://39.105.129.233/myapp/ -c copy output.flv
一、推流和拉流简介
1、直播推流和拉流操作
FFmpeg 工具可以用于 直播 的 推流和拉流 操作 ;
- 推流 是 将本地的音视频流推送到流媒体服务器上 , 如 : 主播将本地电脑上的画面推流到直播平台的流媒体服务器上 ;
- 拉流 是 拉流是从流媒体服务器上接收音视频流并在本地播放或处理的过程 , 如 : 用户 观看直播平台直播时 , 从流媒体服务器上实时获取直播内容 ;
2、直播推流和拉流涉及到的软件
上述操作涉及到 3 个软件 :
- 推流端软件
- 流媒体服务器
- 拉流端软件
3、推流 -> 拉流 流程
流媒体服务器 在 推流 和 拉流 操作中 , 扮演者重要的角色 , 其主要任务 是 将视频 和 音频等多媒体内容进行 编解码 和 传输 ;
- 推流 时 , 推流软件 将 音视频 编码 , 传输给 流媒体服务器 ;
- 流媒体服务器 接收 推流的数据 , 先进行解码 进行各种处理 , 然后再进行编码传输给 拉流端 ;
- 拉流 时 , 拉流软件 将 从 流媒体服务器 接收的 音视频编码 数据 进行解码 , 然后进行播放 ;
二、流媒体服务器搭建
参考如下博客搭建流媒体服务器 :
- 【Android RTMP】RTMP 直播推流服务器搭建 ( Ubuntu 18.04.4 虚拟机 )
- 【Android RTMP】RTMP 直播推流 ( 阿里云服务器购买 | 远程服务器控制 | 搭建 RTMP 服务器 | 服务器配置 | 推流软件配置 | 直播软件配置 | 推流直播效果展示 )
- 【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )
- 【Android RTMP】安卓直播推流总结 ( 直播服务器搭建 | NV21 图像采集 | H.264 视频编码 | PCM 音频采集 | AAC 音频编码 | RTMP 包封装推流 )
1、相关文件准备
在 Android_RTMP博客资料 - 下载 页面 , 可以下载 Ubuntu 系统 搭建 流媒体服务器 需要的 各种工具和服务器软件 ;
主要是需要前两个软件 ;
这是需要上传到 Ubuntu 服务器上需要配置的软件 ;
2、创建 ECS 云服务器实例
进入 阿里云服务器 控制台 云服务器 ECS 页面 https://ecs.console.aliyun.com/home , 点击 " 创建实例 " 按钮 ,
选择 自定义购买 , 抢占式实例 ( 最便宜 ) , 华北 2 ( 北京 ) 区域 , 选择一个默认交换机 ;
实例 通过 选择 1vCPU 筛选 , 选择第一个实例 , 这个便宜 ;
选择 Ubuntu 系统 镜像 , 版本号 18.04 64 位 的 ;
设置 20 G 的云盘 , 能减少费用 ;
选择自定义密码 , 为 root 用户设置 Han@123456 密码 , 要求必须设置 大小写字母 , 特殊字符 和 数字 ;
设置 今天晚上 自动释放实例 , 写完博客演示完就可以 ;
点击 " 确认下单 " 按钮 , 即可创建实例成功 ; 注意 确保 账户中有 余额 , 否则无法创建该实例 , 冲 10 块钱就行 ;
在 实例与镜像 中 , 可以查看刚才创建的实例 ;
3、配置安全组
选择 " 网络与安全 " 下面的 安全组 选项 , 点击 管理规则 链接 ,
在 " 入方向 " 配置 TCP 协议的 8080 和 1935 端口 , 这是为 流媒体服务器 设置的端口 ;
( 也可以设置别的端口 , 不过流媒体配置脚本也需要对应修改 )
点击 实例 最右侧的
按钮 , 选择 网络和安全组 下的 修改安全组 选项 ,
在 弹出的对话框中 , 可以选择刚才设置了 入方向配置 TCP 协议 8080 和 1935 端口 的 安全组 ;
设置了该安全组 , 才能在 流媒体服务器 中使用这两个端口 ;
4、使用 WinSCP 上传流媒体服务器软件及配置脚本
WinSCP 工具在 Android_RTMP博客资料\002_远程Linux控制工具\linux_tools\winscp514 目录下 ;
( 这是 在 Android_RTMP博客资料 - 下载 页面 中下载的博客资料 )
5、使用 SecureCRT 连接服务器
实例 的 公网 IP 是 39.105.129.233 ,
连接 39.105.129.233 地址 , 使用 root 用户名 ,
选择 接收并保存 ;
输入密码 Han@123456 , 并保存密码 ;
点击 " 确定 " 按钮 , 开始连接 ;
连接后 , 可以查看 root 用户目录下的文件 , 包括之前上传的一系列的 流媒体服务器 软件相关的文件 ;
6、搭建流媒体服务器
直接执行 rtmp_server_build.sh 脚本文件 , 即可完成服务器搭建 ;
执行
chmod 777 rtmp_server_build.sh
命令 , 为 rtmp_server_build.sh 脚本文件赋予执行权限 ;
执行
./rtmp_server_build.sh
命令 , 开始进行流媒体服务器配置 ; 期间会提示几次 输入 Y 按回车 ;
显示如下内容 , 说明执行完毕 ;
当前 云服务器 ECS 公网 IP 是 39.105.129.233 ;
则 流媒体 服务器的 HTTP 状态查看地址是 http://39.105.129.233:8080/stat , 在浏览器访问该地址 , 可以查看 流媒体 服务器状态 ;
在 http://39.105.129.233:8080/ 地址可以查看直播内容 ;
三、使用 ffmpeg 命令进行推流操作
执行
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://39.105.129.233/myapp/
命令 , 将本地的 input.mp4 推流到流媒体服务器中 , 开始推流 ;
-
-re
参数 设置 以实时的速度 读取 输入文件 , 如 : 输入视频的长度是 3 分钟 , 那么 使用 3 分钟的时间来处理这个视频 , 不能用最快速度处理完 , 该设置确保了推流的速度与视频播放的速度相匹配 ; -
-i input.mp4
参数 设置 输入文件名称是 input.mp4 , 此处也可以是 实时的录屏 ; -
rtmp://39.105.129.233/myapp/
参数 , rtmp 是 流媒体协议 , 39.105.129.233 是流媒体服务器 , myapp 是在 流媒体服务器 的 nginx.conf 中配置的 rtmp / server / application 配置中配置的应用名称 ;
rtmp {
server {
listen 1935;
application myapp {
live on;
}
}
}
直播的地址不只是 rtmp://39.105.129.233/myapp/ 地址 , 后面可以追加内容 , 如
rtmp://39.105.129.233/myapp/0
rtmp://39.105.129.233/myapp/9527
rtmp://39.105.129.233/myapp/888
这些地址也是可以使用的 , 随后拉流的时候也使用相同的地址进行拉流 ;
四、使用 ffplay 命令进行拉流操作
在另一个窗口 , 执行
ffplay rtmp://39.105.129.233/myapp/
命令 , 开始拉流 播放 ; 效果如下 :
推流完毕后 , 推流的命令行直接退出 , 拉流的命令行需要手动退出 ;
此时 在 服务器状态上 仍然显示有直播流 ;
将 拉流 的 命令行 使用 Ctrl + C 强制退出 ,
此时服务器的流状态显示未 0 ;
五、使用 ffmpeg 命令进行拉流操作
在另一个窗口 , 执行
ffmpeg -i rtmp://39.105.129.233/myapp/ -c copy output.flv
命令 , 开始拉流 ;
执行过程如下 , 期间不会播放直播画面 ;
在 拉流 命令行界面 , 使用 Ctrl + C 退出 , 拉流完成后 , 会自动将推流内容保存到 output.flv 文件中 ;