首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )

【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )

作者头像
韩曙亮
发布2023-03-27 21:32:23
发布2023-03-27 21:32:23
4.7K0
举报

文章目录

一、 服务器搭建


首先按照 【Android RTMP】RTMP 直播推流 ( 阿里云服务器购买 | 远程服务器控制 | 搭建 RTMP 服务器 | 服务器配置 | 推流软件配置 | 直播软件配置 | 推流直播效果展示 ) 中的流程搭建服务器端 , 然后才能开始推流操作 ;

也可以按照 【Android RTMP】RTMP 直播推流服务器搭建 ( Ubuntu 18.04.4 虚拟机 ) 博客中的内容 , 在 VMWare 虚拟机中搭建 RTMP 直播推流服务器 ;

加粗样式配置说明 :

① HTTP 端口号 : 在 http server 中配置的端口号是查看 RTMP 服务器状态网址的端口号 , 如 http://47.94.36.51:8080/stat 地址中 , 就需要注明其端口号是 8080 ;

代码语言:javascript
复制
 listen 8080;

② HTTP 状态查看地址 : 在 conf/nginx.conf 配置文件中配置的该选项 , 就代表了使用 http://47.94.36.51:8080/stat 地址访问即可查看当前直播推流 , 与观看直播的状态 ;

代码语言:javascript
复制
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

③ RTMP 直播端口号 : 下面给 RTMP 服务配置 1935 端口号 , 是 RTMP 的默认端口号 , 因此这里 rtmp://47.94.36.51/myapp/0 直播地址中没有端口号 ;

④ RTMP 直播应用 : 其中 myapp 就是直播的应用名称 , rtmp://47.94.36.51/myapp/0 地址中的 myapp 就是在 rtmp 中配置的 application 应用;

代码语言:javascript
复制
rtmp {
    server {
        listen 1935;

        application myapp {
            live on;
        }
    }
}

二、 手机端推流


1 . 手机直播推流 :

① 开始播放代码 : 向 rtmp://47.94.36.51/myapp/0 地址推流 ;

代码语言:javascript
复制
// rtmp://47.94.36.51/myapp/0
// 0 相当于 直播的 密码
// 配置好服务器后, 记录 IP 地址, 替换 47.94.36.51 IP 地址
mLivePusher.startLive("rtmp://47.94.36.51/myapp/0");

② Camera 采集画面并预览推流 : 这里注意 , 之前图像被逆时针旋转了 90 度 , 设置了图像传感器角度后 , 预览图片纠正过来了 , 但是 Camera 的图像传感器采集的 NV21 格式的图像还是被旋转了 90 度 ;

具体涉及到的图像格式 , 以及图像传感器方向 , 屏幕方向的关系 , 参考博客 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )

2 . 关于手机端的开发流程 :

① 首先实现 Camera 采集图像数据 :

【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )

【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )

【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )

② 理解 NV21 格式的图像数据 :

【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | 文件头 Header 分析 | 标签 Tag 分析 | 视频标签 Tag 数据分析 )

【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | AVC 序列头格式解析 )

③ 将 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 饱和度数据拷贝 | 图像编码操作 )

④ 将编码后的 H.264 格式的视频帧数据打包成 RTMP 数据包 :

【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )

【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 关键帧数据格式 | 非关键帧数据格式 | x264 编码后的数据处理 | 封装 H.264 视频数据帧 )

⑤ 将 RTMP 数据包发送到服务器端 :

【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )

三、 电脑端观看直播


电脑端使用 EVPlayer 观看直播 : 先配置直播地址 , 然后即可观看直播 ;

① 配置直播地址 : rtmp://47.94.36.51/myapp/0 . 这是手机端设置的直播地址 , myapp 表示服务器端的 Nginx 服务器配置的应用 , 端口号是 1935 , RTMP 默认端口号就是 1935 , 这里可以不写 ;

② 电脑端观看直播效果展示 : 屏幕画面被逆时针旋转了 90 度 , 这是因为之前摄像头传感器只设置了将预览画面纠正过来 , 但是 NV21 格式的图像数据还是被逆时针旋转了 90 度的数据 ;

具体涉及到的图像格式 , 以及图像传感器方向 , 屏幕方向的关系 , 参考博客 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )

四、 RTMP 服务器端状态


查看服务器端状态信息 : 查看地址 http://47.94.36.51:8080/stat , 可以看到有一个 publishing 推流端 , 有一个 playing 观看直播端 ;

① 服务器端 : 服务器端是 Nginx 服务器 , 运行了 RTMP Module 应用 , 可以实现直播推流中功能 ;

② 推流端 : 直播推流端就是手机 , 手机端 Camera 采集 NV21 格式的图像数据 , 并使用 x264 将其编码为 H.264 格式 , 最后使用 RTMPDump 将 H.264 数据帧编码为 RTMP 数据包 , 推送到 RTMP 服务器端 ;

③ 播放端 : 直播内容播放端就是电脑上使用 EVPlayer 观看直播 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、 服务器搭建
  • 二、 手机端推流
  • 三、 电脑端观看直播
  • 四、 RTMP 服务器端状态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档