文章目录
安卓直播推流专栏博客总结
0 . 资源和源码地址 :
- 资源下载地址 : 资源下载地址 , 服务器搭建 , x264 , faac , RTMPDump , 源码及交叉编译库 , 本专栏 Android 直播推流源码 ;
- GitHub 源码地址 : han1202012 / RTMP_Pusher
1. 搭建 RTMP 服务器 : 下面的博客中讲解了如何在 VMWare 虚拟机中搭建 RTMP 直播推流服务器 ;
2. 准备视频编码的 x264 编码器开源库 , 和 RTMP 数据包封装开源库 :
-
【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )
-
【Android RTMP】Android Studio 集成 x264 开源库 ( Ubuntu 交叉编译 | Android Studio 导入函数库 )
3. 讲解 RTMP 数据包封装格式 :
4. 图像数据采集 : 从 Camera 摄像头中采集 NV21 格式的图像数据 , 并预览该数据 ;
-
【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )
-
【Android RTMP】Android Camera 视频数据采集预览 ( NV21 图像格式 | I420 图像格式 | NV21 与 I420 格式对比 | NV21 转 I420 算法 )
-
【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )
5. NV21 格式的图像数据编码成 H.264 格式的视频数据 :
-
【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据 SPS PPS )
-
【Android RTMP】x264 图像数据编码 ( Camera 图像数据采集 | NV21 图像数据传到 Native 处理 | JNI 传输字节数组 | 局部引用变量处理 | 线程互斥 )
-
【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )
6. 将 H.264 格式的视频数据封装到 RTMP 数据包中 :
-
【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )
-
【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 关键帧数据格式 | 非关键帧数据格式 | x264 编码后的数据处理 | 封装 H.264 视频数据帧 )
-
【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )
7. 阶段总结 : 阿里云服务器中搭建 RTMP 服务器 , 并使用电脑软件推流和观看直播内容 ;
-
【Android RTMP】RTMP 直播推流 ( 阿里云服务器购买 | 远程服务器控制 | 搭建 RTMP 服务器 | 服务器配置 | 推流软件配置 | 直播软件配置 | 推流直播效果展示 )
-
【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )
8. 处理 Camera 图像传感器导致的 NV21 格式图像旋转问题 :
-
【Android RTMP】NV21 图像旋转处理 ( 问题描述 | 图像顺时针旋转 90 度方案 | YUV 图像旋转细节 | 手机屏幕旋转方向 )
-
【Android RTMP】NV21 图像旋转处理 ( 图像旋转算法 | 后置摄像头顺时针旋转 90 度 | 前置摄像头顺时针旋转 90 度 )
9. 下面这篇博客比较重要 , 里面有一个快速搭建 RTMP 服务器的脚本 , 强烈建议使用 ;
10. 编码 AAC 音频数据的开源库 FAAC 交叉编译与 Android Studio 环境搭建 :
-
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )
-
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )
11. 解析 AAC 音频格式 :
12 . 将麦克风采集的 PCM 音频采样编码成 AAC 格式音频 , 并封装到 RTMP 包中 , 推流到客户端 :
-
【Android RTMP】音频数据采集编码 ( FAAC 音频编码参数设置 | FAAC 编码器创建 | 获取编码器参数 | 设置 AAC 编码规格 | 设置编码器输入输出参数 )
-
【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频解码信息 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )
-
【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频采样数据 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )
上一篇博客 【Android RTMP】RTMP 直播推流服务器搭建 ( Ubuntu 18.04.4 虚拟机 ) 具体演示了在虚拟机上搭建直播推流服务器 , 并且进行错误排查的过程 , 测试一下搭建流程是否能跑通 ;
本博客演示如何 在阿里云购买服务器 , 远程服务器控制 , 搭建 RTMP 直播推流服务器 , 并配置服务器 , 直播展示 , 全过程的记录 ;
一、 阿里云服务器购买
1 . 进入阿里云控制台的云服务器 ECS 界面 :
2 . 选择服务器类型 : 选个抢占式的实例 , 挑个便宜点的网络增强型的服务器 ;
3 . 带宽设置 : 设置按流量收费 , 100M 带宽 ;
4 . 设置今晚 11 点释放 :
5 . 实例查看 :
6 . 配置安全组 : 入方向配置 TCP 协议 8080 和 1935 端口 ;
二、 远程服务器控制软件
1 . 使用 WinSCP 工具连接服务器 , 并与服务器进行文件交互操作 ;
2 . 连接后界面 :
3 . 将上述两个源码上传到远程服务器的 /root/rtmp 目录下 :
三、 配置 Ubuntu 服务器
1 . 更新 apt 源
编译 Nginx 需要安装一些依赖库 , 必须更新 apt 源 , 才能安装 ;
1 . 备份源 :
mv /etc/apt/sources.list /etc/apt/sourses.list.backup
2 . 添加源 : 本地编辑 sources.list , 内容如下 , 上传到服务器 /root/rtmp/ 目录下 ;
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
将 sources.list 上传到 rtmp 目录下 , 并复制到 /etc/apt/ 目录下 ;
root@hsl:~/rtmp# cp sources.list /etc/apt/
3 . 更新源 :
sudo apt-get update
2 . 安装 pcre、OpenSSL、zlib 库
1 . 安装编译 Nginx 所需的 pcre , OpenSSL , zlib 库 ;
$ sudo apt-get install libpcre3 libpcre3-dev
$ sudo apt-get install openssl libssl-dev
$ sudo apt-get install zlib1g-dev
3 . 解压 nginx-1.15.3.tar.gz、nginx-rtmp-module-1.2.1.tar.gz 源码
$ tar xvf nginx-1.15.3.tar.gz
$ tar xvf nginx-rtmp-module-1.2.1.tar.gz
4 . 执行 configure 生成 Makefile 文件
$ ./configure --prefix=./bin --add-module=../nginx-rtmp-module-1.2.1
5 . 编译安装
$ make install
6 . 配置 Nginx 服务器
配置 conf/nginx.conf 脚本 : 在本地配置 nginx.conf 脚本 , 然后上传到服务器 /root/rtmp/ 目录中 ;
user root;
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application myapp {
live on;
}
}
}
http {
server {
listen 8080;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /root/rtmp/nginx-rtmp-module-1.2.1/;
}
location /control {
rtmp_control all;
}
location /rtmp-publisher {
root /root/rtmp/nginx-rtmp-module-1.2.1/test;
}
location / {
root /root/rtmp/nginx-rtmp-module-1.2.1/test/www;
}
}
}
备份原来的脚本 : 在 /root/rtmp 目录下执行该命令 ;
$ mv nginx-1.15.3/bin/conf/nginx.conf nginx-1.15.3/bin/conf/nginx.conf.backup
复制上传到脚本到 nginx-1.15.3/bin/conf/ 目录下 : 在 /root/rtmp 目录下执行该命令 ;
$ cp nginx.conf nginx-1.15.3/bin/conf/
7 . 配置 Nginx 服务器文件权限
启动时出现 403 错误 , 怀疑是文件权限不足 , 这里将 nginx-1.15.3 和 nginx-rtmp-module-1.2.1 赋予所有的权限 ;
root@octopus:~/rtmp# chmod -R 777 nginx-1.15.3
root@octopus:~/rtmp# chmod -R 777 nginx-rtmp-module-1.2.1
8 . 查看 Nginx RTMP 服务器状态
1 . 查看状态 : http://47.94.36.51:8080/stat
2 . 查看直播内容 : http://47.94.36.51:8080
四、 推流软件下载与配置
1 . 推流软件 : 使用 EV 录屏软件 作为推流软件 , 点击链接进入下载界面 ;
2 . 配置推流地址 : rtmp://47.94.36.51/myapp/ , 密码 0 ;
选择 在线直播 , 点击右上角的设置按钮 ;
弹出设置对话框 , 设置直播地址 rtmp://47.94.36.51/myapp/ , 密码设置为 0 ;
3 . 开始推流 : 点击左下角播放按钮 , 即可开始推流 ;
4 . 查看服务器端 RTMP 推流状态 : 111.192.247.192 地址正在向服务器推流 , 这个地址就是当前我的电脑地址 ;
五、 直播软件下载与配置
1 . 直播软件 : 使用 EVPlayer 观看直播 , 点击该链接下载软件 ;
2 . 直播配置 : 邮件点击界面 , 选择播放网络流 , 输入 直播地址 rtmp://47.94.36.51/myapp/ , 密码 0 ;
3 . 直播效果展示 : 居然不让截屏 , 贴张照片 ;
4 . 服务器状态查看 : 可以看到一个设备正在推流 , 一个设备正在观看直播 ;