?
博客总结 :
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://39.105.129.233/myapp/
ffplay rtmp://39.105.129.233/myapp/
ffmpeg -i rtmp://39.105.129.233/myapp/ -c copy output.flv
FFmpeg 工具可以用于 直播 的 推流和拉流 操作 ;
上述操作涉及到 3 个软件 :
流媒体服务器 在 推流 和 拉流 操作中 , 扮演者重要的角色 , 其主要任务 是 将视频 和 音频等多媒体内容进行 编解码 和 传输 ;
参考如下博客搭建流媒体服务器 :
在 Android_RTMP博客资料 - CSDN 下载 页面 , 可以下载 Ubuntu 系统 搭建 流媒体服务器 需要的 各种工具和服务器软件 ;
主要是需要前两个软件 ;
这是需要上传到 Ubuntu 服务器上需要配置的软件 ;
进入 阿里云服务器 控制台 云服务器 ECS 页面 https://ecs.console.aliyun.com/home , 点击 " 创建实例 " 按钮 ,
选择 自定义购买 , 抢占式实例 ( 最便宜 ) , 华北 2 ( 北京 ) 区域 , 选择一个默认交换机 ;
实例 通过 选择 1vCPU 筛选 , 选择第一个实例 , 这个便宜 ;
选择 Ubuntu 系统 镜像 , 版本号 18.04 64 位 的 ;
设置 20 G 的云盘 , 能减少费用 ;
选择自定义密码 , 为 root 用户设置 Han@123456 密码 , 要求必须设置 大小写字母 , 特殊字符 和 数字 ;
设置 今天晚上 自动释放实例 , 写完博客演示完就可以 ;
点击 " 确认下单 " 按钮 , 即可创建实例成功 ; 注意 确保 账户中有 余额 , 否则无法创建该实例 , 冲 10 块钱就行 ;
在 实例与镜像 中 , 可以查看刚才创建的实例 ;
选择 " 网络与安全 " 下面的 安全组 选项 , 点击 管理规则 链接 ,
在 " 入方向 " 配置 TCP 协议的 8080 和 1935 端口 , 这是为 流媒体服务器 设置的端口 ;
( 也可以设置别的端口 , 不过流媒体配置脚本也需要对应修改 )
点击 实例 最右侧的
按钮 , 选择 网络和安全组 下的 修改安全组 选项 ,
在 弹出的对话框中 , 可以选择刚才设置了 入方向配置 TCP 协议 8080 和 1935 端口 的 安全组 ;
设置了该安全组 , 才能在 流媒体服务器 中使用这两个端口 ;
WinSCP 工具在 Android_RTMP博客资料\002_远程Linux控制工具\linux_tools\winscp514 目录下 ;
( 这是 在 Android_RTMP博客资料 - CSDN 下载 页面 中下载的博客资料 )
实例 的 公网 IP 是 39.105.129.233 ,
连接 39.105.129.233 地址 , 使用 root 用户名 ,
选择 接收并保存 ;
输入密码 Han@123456 , 并保存密码 ;
点击 " 确定 " 按钮 , 开始连接 ;
连接后 , 可以查看 root 用户目录下的文件 , 包括之前上传的一系列的 流媒体服务器 软件相关的文件 ;
直接执行 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 -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 rtmp://39.105.129.233/myapp/
命令 , 开始拉流 播放 ; 效果如下 :
推流完毕后 , 推流的命令行直接退出 , 拉流的命令行需要手动退出 ;
此时 在 服务器状态上 仍然显示有直播流 ;
将 拉流 的 命令行 使用 Ctrl + C 强制退出 ,
此时服务器的流状态显示未 0 ;
在另一个窗口 , 执行
ffmpeg -i rtmp://39.105.129.233/myapp/ -c copy output.flv
命令 , 开始拉流 ;
执行过程如下 , 期间不会播放直播画面 ;
在 拉流 命令行界面 , 使用 Ctrl + C 退出 , 拉流完成后 , 会自动将推流内容保存到 output.flv 文件中 ;