目录

作者: admin

直播流转码 RTMP 转 HTTP-FLV 用于 WEB 播放解决流程(续)

一、如何安装以及配置基础环境

1.1 简述

本文涉及以下内容及资料,需要您提前做好以下知识点的基础认知,可极大的提升在本文后面的内容做
理解以及实践。

  1. 涉及技术及工具内容:NginxFFmpegFlv.js
  2. 涉及直播流信息:RTMPRTSPHTTP-FLV
  3. 涉及编码格式:H265H264

以上资料参考:

Nginx 基础简介:https://www.runoob.com/w3cnote/nginx-setup-intro.html
FFmpeg 基础使用:http://www.ruanyifeng.com/blog/2020/01/ffmpeg.html Flv.js
前端播放组件:https://github.com/Bilibili/flv.js

1.2 安装教程

由于浏览器对 Flash 对禁用,Web 播放 RTMP 于是成为了一个难题,目前主流的 Web 直播流都为 http-
flv 格式,本文着重讲解如何将 RTMP 转为 Http-Flv。 、

具体安装教程:https://wxzzz.com/425.html

二、如何正确的配置高性能直播环境

2.1 简述

基于本文以上内容,想必您已经正确的安装了基础环境并实现了网⻚端的直播支持。

但它仍然存在一些性能上的问题,它目前的配置单个网⻚⻚面仅能播放 6 个直播视频,并且播放有较大 的卡顿、延迟。

2.2 发现问题所在

通过摸索、资料查询、实践得出以下结论。

  1. 关于 Flash 的支持:2021年后 Chrome 浏览器已经停止对 Flash 插件的支持。
  2. 关于单个网站⻚面最多只能播放 6 个视频:Chrome 以及大部分浏览器截止目前版本仅支持单个网
    ⻚播放 6 个视频(资料显示由于 HTTP 1.0/1.1 协议仅支持单个链接限制最大仅 6 路数据流支
    持)。
  3. 关于卡顿、延迟:由于流的实时拉取、再推送、再输送直播流整个流程的衔接,需要网络的完美支
    持,没有缓冲区、主动推流等配置它依然会卡顿(具体每一项的配置请参照 nginx-http-flv-module 官方文档nginx-rtmp-module 官方文档 确保正确配置您的程序)

2.3 解决问题

2.3.1 配置 Nginx 基础环境

  1. 配置网⻚端为 HTTPS / HTTP2.0 协议。
  2. 配置 推流端的访问为 HTTP 普通协议 、并且配置 HTTPS / HTTP2.0协议代理 HTTP 推流端

以上配置可自行百度解决相应的配置信息。

配置 Nginx 中的 RTMP 段,以解决性能卡顿、延迟问题:

配置(一):

 
server {
    listen 1935;
    server_name localhost;
    application myapp {
        live on;
        gop_cache on; #打开 GOP 缓存,减少首屏等待时间 }
}

关键配置: gop_cache on;

配置(二):

 
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;
rtmp{
    out_queue 4096;
 
out_cork 8;
    max_streams 128;
    timeout 15s;
    drop_idle_publisher 15s;
    log_interval 5s;
    log_size 1m;
    server{
        listen 1935;
        application myapp{
            live on;
            gop_cache on;
        }
    // ....
    }
}

关键配置:第 1 - 3 行、 6 - 12 行 配置。

至此,基于以上配置已经可实现高性能的直播请求访问。(当然,此处的”高性能“是针对基础配置而来
的,需要更高的性能直播请求,还需要更深一步的技术挖掘,道路漫漫⻓)

三、参考文献

  1. ubuntu16 nginx +rtmp+nginx-http-flv-module 环境搭建
  2. FFmpeg 视频处理入⻔教程 – 阮一峰
  3. nginx-http-flv-module 说明文档(中文)
  4. nginx-rtmp-module 说明文档
  5. flv.js 说明文档

直播流转码 RTMP 转 HTTP-FLV 用于 WEB 播放解决流程

由于浏览器对 flash 对禁用,Web 播放 RTMP 于是成为了一个难题,目前主流的 Web 直播流都为 http-flv 格式,本文着重讲解如何将 RTMP 转为 Http-Flv。

(重要)补充说明:通过对文档对阅读,如果您只是想推送 RTMP 流为 http-flv 的话,无需 ffmpeg 自行推流,可直接在 nginx 中的 rtmp 使用 “pull” 配置,如下图所示:

1. 实现方式简述

通过服务端将其 RTMP 流实时转为 http-flv 流,从而浏览器可直接使用该流进行直播(使用bilibili提供的 flv.js )。

所需资料集(以及下载地址):

  1. nginx
  2. nginx-http-flv-module
  3. ffmpeg
  4. flv.js

2. 配置环境

本文以 CentOS 系统为例,其操作大同小异。

2.1 下载 nginx 及 nginx-http-flv-module 进行编译安装

  1. 下载 nginxnginx-http-flv-module/opt/tools/ 目录中。
  2. 依次安装系统相关依赖项
yum -y install unzip
yum -y install gcc-c++ 
yum -y install pcre pcre-devel  
yum -y install zlib zlib-devel 
yum -y install openssl openssl-devel

3. 解压 nginx-http-flv-module-1.2.6.zip 解压到/usr/local/nginx 目录中

cd /opt/tools
unzip nginx-http-flv-module-1.2.6.zip
cp -r /opt/toos/nginx-http-flv-module /usr/local/nginx/nginx-http-flv-module

4. 将 nginx-http-flv-module 模板添加到 nginx 中,生成 make 文件 并安装 nginx

cd /opt/tools
tar -zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --prefix=/usr/local/nginx  --add-module=/usr/local/nginx/nginx-http-flv-module
make && make install

5. 修改 nginx 配置文件,这里我贴出我自己的文件,根据个人情况可做相应修改。


worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1985;

        application myapp {
            live on;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;


    server {
        listen       80;
        server_name  localhost;

        location / {
            add_header 'Access-Control-Allow-Origin' '*';
            root html;
            index  index.html index.htm;
        }

        location /live {
            flv_live on;
        }

        location /flv {
            add_header 'Access-Control-Allow-Origin' '*';
            flv_live on;
            chunked_transfer_encoding on;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

6. 启动 nginx 服务

cd /usr/local/nginx/sbin
./nginx

Tips:停止nginx服务“ ./nginx -s stop ” , 重新加载配置 “ ./nginx -s reload

通过以上配置,即可完成服务端的直播环境配置。

2.2 ffmpeg 推送 RTMP 直播流到 nginx

安装ffmpeg:首先推送直播流到电脑(可以是同 nginx 一台服务器,性能会更好)必须已经安装了 ffmpeg 到环境,具体安装教程百度、Google一大把。

通过以上到 nginx 配置后,我们可以使用端口 1985,应用名称 myapp 来进行推送 RTMP 流给服务器,假定我们到服务器IP为“ 10.211.55.5 ” ,以下 ffmpeg 命令即可推送:

ffmpeg -re -i rtmp://58.200.131.2:1935/livetv/cctv1 -c copy -f flv rtmp://10.211.55.5:1985/myapp/testv

以上参数简单解释:1985 为端口,myapp 为对应nginx配置的应用名称,testv 为直播流名称可以随意填写,后面可以用这个名称,具体配置解释文档进行查阅:https://github.com/winshining/nginx-http-flv-module

运行正常结果如下图所示:

通过以上即可配置完成。

3. 使用 Web 进行直播

配置完成后,咱们就可以使用 nginx 配置好的路径进行直播啦,目前配置了两个路径如下:

http://10.211.55.5/live?port=1985&app=myapp&stream=testv  // 原始转播地址

http://10.211.55.5/flv?port=1985&app=myapp&stream=testv   // flv 转播地址

flv.js 在线测试地址:http://bilibili.github.io/flv.js/demo/

运行效果:

Tips,为了测试流是否正常,也可以使用 VLC (百度一下) 进行播放测试,如下图所示:

4. 以上,大功告成。

更多的细节,配置,及内容都可以到相应到网站进行查阅相关文档进行调整,处理。

本文的后续更新,参考地址:直播流转码 RTMP 转 HTTP-FLV 用于 WEB 播放解决流程(续)

CentOS8 切换图形界面与命令行(终端)界面

1. 查看当前默认启动的界面类型

 systemctl get-default

multi-user.target 表示命令行界面方式启动

graphical.target 表示图形界面方式启动

2. 设置为图形界面方式启动

systemctl set-default graphical.target

然后重启系统即可。

3. 设置为命令行(终端)界面方式启动

systemctl set-default multi-user.target

然后重启系统即可。

Mac Nginx 安装与配置

1. 安装 Nginx

brew install nginx

2. 启动、停止 Nginx

2.1 启动 Nginx,直接在终端输入“nginx” 即可

nginx

2.2 停止 Nginx,在终端输入以下内容:

nginx -s stop

Tips:更多命令可输入 nginx -h 查看。

Nginx 启动后,默认端口为 8080 , 可直接通过浏览器访问:http://localhost:8080/ 即可得到以下界面:

3. 配置 Nginx

/usr/local/etc/nginx/nginx.conf (配置文件路径)
/usr/local/var/www (服务器默认路径)

Mysql 查看历史执行SQL语句

需要开启 Mysql 日志,即可实现历史执行 SQL 记录

1、设置

-- SET GLOBAL log_output = 'TABLE';SET GLOBAL general_log = 'ON'; //日志开启
-- SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'OFF'; //日志关闭

2、查询

SELECT * from mysql.general_log ORDER BY event_time DESC;

3、清空表(delete对于这个表,不允许使用,只能用truncate)

-- truncate table mysql.general_log;

ps:在查询到所需要的记录之后,应尽快关闭日志模式,占用磁盘空间比较大

如何从零创建一个React + Antd + React路由项目

开始之前

  1. 本文是以基于React + TypeScript 环境作为例子。
  2. 本文默认使用 yarn 作为包管理器,npm 使用差异无几,可自行查阅相关资料进行转换或安装 Yarn 后尝试本文操作流程来创建您的 React 项目。

一、创建 React 项目 (TypeScript)

1. 创建 React 项目

yarn create react-app antd-demo-ts --template typescript

antd-demo-ts 表示你的项目名称,可以自己取一个。

$ cd antd-demo-ts
$ yarn start

创建完成后,就可以 cd 到项目目录中,npm start 运行,即可弹出项目的初始默认站点,说明 OK 了。

二、集成 Antd UI框架

参考资料:https://ant-design.gitee.io/docs/react/use-in-typescript-cn

1. 引入 Antd

yarn add antd

修改 src/App.tsx,引入 antd 的按钮组件。

import React, { FC } from 'react';
import { Button } from 'antd';
import './App.css';

const App: FC = () => (
  <div className="App">
    <Button type="primary">Button</Button>
  </div>
);

export default App;

修改 src/App.css,在文件顶部引入 antd 的样式。

@import '~antd/dist/antd.css';

重新启动 yarn start,现在你应该能看到页面上已经有了 antd 的蓝色按钮组件,接下来就可以继续选用其他组件开发应用了。其他开发流程你可以参考 create-react-app 的官方文档

antd 使用 TypeScript 书写并提供了完整的定义,你可以享受组件属性输入建议和定义检查的功能。

三、创建 React-Router 作为项目路由

如果我们的项目并不是一个单页应用,那么一定需要用到 React-Router 作为我们的项目路由来进行 URL 跳转。

参考资料:React Router 中文文档 ,本文则使用 react-router-dom 作为路由主键(它是基于 react-router 来的,多了一些页面上的dom操作而已,参考:区别

1. 引入路由组件

yarn add @types/react-router-dom
yarn add react-router-dom

附加说明:@types/react-router-dom只是 TypeScript 的声明文件而已,还是要安装 react-router-dom 核心代码。

2. 修改 App.tsx 文件代码如下:

import React from 'react';
import { BrowserRouter as Router, Link, Route, RouteComponentProps } from 'react-router-dom';
import { Button } from 'antd';
import './App.css';

function Home(props: any) {
  let toHome = () => {
    props.history.push('/custom');
  };

  return (<div>
    测试首页

    {/* 使用js代码来跳转 */}
    <Button onClick={toHome} type="primary">跳转到自定义页面</Button>
  </div>)
}

function News(props: any) {
  console.log('news ,props', props)
  return (<div>新闻页</div>)
}

function About() {
  return (<div>关于页</div>)
}

function Custom() {
  return (<div>自定义页面</div>)
}


export interface AppProps extends RouteComponentProps {
  history: any;
}

class App extends React.Component {

  toCusomtPage = () => {
    console.log(this.props)
  }

  render() {
    return (
      <div className="App">

        {/* 使用 Link 组件来跳转 */}
        <Router>
          <div>
            <Link to="/"> 首页 </Link>
            <Link to="/news"> 新闻页 </Link>
            <Link to="/about"> 介绍页 </Link>
          </div>
          <Route path="/" exact component={Home} />
          <Route path="/news" component={News} />
          <Route path="/about" component={About} />
          <Route path="/custom" component={Custom} />
        </Router>
      </div>
    );
  }

}

export default App;

即可实现路由、路由控件跳转、js代码跳转

四、结束

至此,已经可以自己在代码中配置各个页面的路由途径。

Ant Design 组件 中选择符合自己需求的组件放上去即可开始自己的业务编写。

关于 React 与 TypeScript 的入门参考资料推荐:利用 typescript 写 react-router 5

解决:Mac ping不通任何域名、IP却可以

突然电脑上的 SVN 链接不上了,试着 ping 了一下域名,发现所有域名都ping 不通,但 IP 却可以 ping 通,估计都是本机 DNS 服务器设置出问题了。

解决方法:

首先,配置正确的dns,既可以可视化界面操作

也可以命令行操作:networksetup -setdnsservers Wi-Fi 8.8.8.8

查看:networksetup -getdnsservers Wi-Fi

以上一般就可以了。

如果依然 ping 不通,尝试继续按如下方式解决:

ping www.baidu.com

ping: cannot resolve www.baidu.com: Unknown host

查看ip地址:nslookup baidu.com

Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   baidu.com
Address: 220.181.38.148
Name:	baidu.com
Address: 39.156.69.79

然后ping 39.156.69.79

➜  ~ ping 39.156.69.79              
PING 39.156.69.79 (39.156.69.79): 56 data bytes
64 bytes from 39.156.69.79: icmp_seq=0 ttl=48 time=40.310 ms
64 bytes from 39.156.69.79: icmp_seq=1 ttl=48 time=38.929 ms

解决办法

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

然后ping域名,就可以了