RTMP (II) 构建推流服务
同步个人简书技术文章
目录:
RTMP(一)录屏直播理论入门
RTMP(二)搭建推流服务
RTMP (三)音视频采集与数据封包
RTMP(四)交叉编译与CameraX
RTMP (五)摄像头数据处理
RTMP (六)音视频编码推流
mac + nginx + rtmp 模块
-
brew tap denji/nginx
-
brew install nginx-full --with-rtmp-module
-
配置
接下来配置config,在 /usr/local/etc/nginx 下的nginx.conf 添加rtmp
rtmp {
server {
listen 1935;
ping 30s;
notify_method get;
application myapp {
live on;
record off;
#丢弃闲置5s的连接
drop_idle_publisher 5s;
max_connections 1024;
}
#增加对HLS支持开始
application hls {
live on;
hls on;
hls_path /usr/local/var/www/hls;
hls_fragment 5s;
}
#增加对HLS支持结束
}
}
下载模块并解压
wget codeload.github.com/arut/nginx-…
tar xvf v1.2.1
解压的到 nginx-rtmp-module-1.2.1
配置
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#...................
#添加的部分
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
#为nginx-rtmp-module解压的地址
#root /usr/local/live/nginx-rtmp-module-master/;
root /xxxx/dev/server_workspace/nginx-rtmp-module-1.2.1;
}
#...................
location / {
root html;
index index.html index.htm;
}
省略后面默认的。。。。
}
- 测试启动
nginx 启动
ngix -s reload 重启
nginx -s stop 停止
注意点
其实就是从 nginx-rtmp-module-1.2.1/test/nginx.conf 中拷贝。
端口占用检查: lsof -i:8080 需要注意的是目录与端口是否被占用,比如8080端口被占用,可以改为了8081,然后需要开放端口。
如果使用的阿里云服务器可以进入阿里云控制台开放
-
测试 ip:8080/stat
-
推流测试
obsproject.com/welcome
先用Obs测试
在OBS 推流软件设置 地址: rtmp://ip:1935/myapp 秘钥:abc 成功后会有记录
然后用vlc输入播放的流地址
rtmp://ip:1935/myapp/abc
上一篇: High&NewTech:AI技术滥用DeepNude技术(从下载到系统宕机→最终禁用)而引发的对AI道德底线的深度拷问--191017再次更新(一)
下一篇: 生死36小时2023年9月,我成为第一个主动去缅甸渺瓦底的中国人,没有搞灰色物质(摘自峰哥自述的微博文章,讲述他生命最后时刻在缅甸的经历)。
推荐阅读
-
网关安全(II)--OAuth2 协议介绍和身份验证服务器构建
-
(ii) ffmpeg 下载安装并拉流推流示例
-
RSR 服务器 进行 RTMP 推流报错: Failed to update header with correct duration Failed to update header with correct duration
-
RTMP (II) 构建推流服务
-
实施实时演示 - RTMP 推流和 HTTP-FLV 拉流
-
RTMP 推送流视频流直播/点播平台上的 VR 直播流服务的应用与技术分析
-
腾讯视频直播 02-推流-美颜滤镜 同样,腾讯云提供了 setBeautyFilter 方法来设置美颜风格、磨皮程度、美白程度和泛红程度 //style 磨皮风格:0:平滑 1:自然 2:朦胧 //美容级别:0-9。值为 0 时关闭美颜效果。默认值:0,关闭美颜效果。 //美白级别:取值 0-9。值为 0 时,将关闭美白效果。默认值:0,关闭美白效果。 //ruddyLevel:取值范围为 0-9。值为 0 时关闭美白效果。默认值:0,关闭美白效果。 public boolean setBeautyFilter(int style, int beautyLevel, int whiteningLevel, int ruddyLevel);; public boolean setBeautyFilter(int style, int beautyLevel, int whiteningLevel, int ruddyLevel) 滤镜 setFilter 方法可以设置滤镜效果,滤镜本身是一个直方图文件。setSpecialRatio 方法可以设置滤镜的程度,从 0 到 1,越大滤镜效果越明显,默认值为 0.5。 Bitmap bitmap = BitmapUtils.decodeResource(getResources, R.drawable.langman); if (mLivePusher) if (mLivePusher ! = null) { mLivePusher.setFilter(bmp); } 控制摄像头 腾讯云 sdk 默认为前置摄像头(可以通过修改 TXLivePushConfig 的配置函数 setFrontCamera 来修改默认值),调用一次 switchCamera 就切换一次,注意切换摄像头前要确保 TXLivePushConfig 和 TXLivePusher 对象已经初始化。 mLivePushConfig.setFrontCamera(true); // 默认前置摄像头。 mLivePusher.switchCamera; //切换摄像头。 ⑦ 设置徽标水印 腾讯视频云目前支持两种设置水印的方式:一种是在流媒体 SDK 中设置水印,原理是在 SDK 中对视频进行编码前在画面中设置水印。另一种方式是在云端设置水印,即由云端解析视频并添加水印标识。 建议使用 SDK 添加水印,因为在云端添加水印会有问题。下面是添加水印的 SDK 介绍: //设置视频水印 mLivePushConfig.setWatermark(BitmapFactory.decodeResource(getResources,R.drawable.watermark), 10, 10); // 最后两个参数是视频的水印。 //最后两个参数是水印位置的 X 轴和 Y 轴坐标。 mLivePusher.setConfig(mLivePushConfig); 如果需要对水印图像的位置进行模型适配,则需要调用水印规范化接口。 /设置视频水印 mLivePushConfig.setWatermark(mBitmap, 0.02f, 0.05f, 0.2f); //参数为水印图像。 //参数包括水印图像的位图、水印位置的 X 轴坐标、水印位置的 Y 轴坐标和水印宽度。后三个参数的范围是 [0,1]。 // 最后两个参数是水印位置的 X 轴坐标和 Y 轴坐标。 mLivePusher.setConfig(mLivePushConfig); TXLivePushConfig 中的 setHardwareAcceleration 方法可以启用或禁用硬件编码。 if (mHWVideoEncode){ if (mLivePushConfig ! = null) { if (Build.VERSION.SDK_INT < 18){ Toast.makeText(getApplicationContext, "Hardware acceleration failed, current phone API level is too low (min 18)"、 Toast.LENGTH_SHORT).show; mHWVideoEncode = false; } } } } mLivePushConfig.setHardwareAcceleration(mHWVideoEncode ? TXLiveConstants.ENCODE_VIDEO_HARDWARE : TXLiveConstants.ENCODE_VIDEO_SOFTWARE); mLivePusher.setConfig(mLivePushConfig); // 如果您不确定何时启用硬件加速,建议将其设置为 ENCODE_VIDEO_AUTO。 // 默认情况下启用软件编码,但如果手机的 CPU 使用率超过 80% 或帧速率为 10,SDK 将自动切换到硬件编码。 ⑨ 后台推流 在常规模式下,一旦应用程序进入后台,摄像头捕捉数据的能力就会被 Android 禁用,这意味着 SDK 无法继续捕捉和编码音频和视频数据。如果我们什么都不做,故事就会按照下面的脚本发展: 阶段 1(背景剪切后 10 秒 ->)- CDN 无法将视频流传输给观众,因为没有数据,观众看到的是主帧。 阶段 2(10 秒-> 70 秒)--观众一方的播放器因无法接收到直播流而退出,房间里空无一人。 第 3 阶段(70 秒后)--服务器直接断开了推送流媒体的 RTMP 链接,主播需要重新打开直播才能继续。 主播可能只是短暂地接了一个紧急电话,但各云提供商的安全措施会迫使主播的直播提前结束。 1) 设置 setPauseFlag 在开始推流之前,使用 TXLivePushConfig 的 setPauseImg 接口设置一个等待图像,其含义建议为 "主播将暂时离开,稍后再回来"。
-
如何轻松借助OpenCV进行RTMP直播推流操作指南
-
搭建一个结合Nginx、Nginx-RTMP-Module和SpringBoot的简易直播流服务器,轻松实现视频推送与播放的实现实时直播功能。
-
让FFmpeg支持RTMP推流H265:如何修改源码?