当前位置: 首页 > news >正文

淄博网站建设公司有多少家360营销

淄博网站建设公司有多少家,360营销,做瞹视频网站哪里看,营销网站好不好本章目录: 环境1. 安装依赖2. 创建 Nginx 编译目录3. 下载 Nginx 和 Nginx-RTMP-Module4. 编译 Nginx 并添加 RTMP 模块5. 验证 Nginx 安装成功6. 配置环境变量7. 修改 Nginx 配置文件8. 启动 Nginx 服务查看 Nginx 是否启动成功查看端口监听状态 8. 常见问题及解决方法1. 缺少…

本章目录:

    • 环境
    • 1. 安装依赖
    • 2. 创建 Nginx 编译目录
    • 3. 下载 Nginx 和 Nginx-RTMP-Module
    • 4. 编译 Nginx 并添加 RTMP 模块
    • 5. 验证 Nginx 安装成功
    • 6. 配置环境变量
    • 7. 修改 Nginx 配置文件
    • 8. 启动 Nginx 服务
      • 查看 Nginx 是否启动成功
      • 查看端口监听状态
    • 8. 常见问题及解决方法
      • 1. 缺少 `zlib` 库
      • 2. 找不到 `openssl` 库
      • 3. Nginx 端口冲突
    • 9. 测试推流与播放
      • 必要资源下载:
      • 推流命令示例
        • 服务端Ubuntu中推流:
        • 客户端Windows中使用ffplay命令拉流:
      • 播放效果如下:
    • 10. 使用C++ 和FFmpeg库实现相同RTMP效果:
      • 目录结构如下
      • main.cpp源码如下,FFmpeg实现RTMP:
      • cmake代码如下:
      • 构建和执行步骤:
    • 其它
        • Nginx相关源码库的官网链接:

环境

  • 服务端系统:Ubuntu
  • 播放器:Windows 下使用 ffplay 命令

1. 安装依赖

在 Ubuntu 系统中,执行以下命令安装必要的依赖项:

sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

2. 创建 Nginx 编译目录

$ mkdir my_nginx_rtmp
$ cd my_nginx_rtmp/
$ pwd
/home/togevision/wzt/my_nginx_rtmp

3. 下载 Nginx 和 Nginx-RTMP-Module

wget http://nginx.org/download/nginx-1.21.6.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip# 解压压缩包
tar -xf nginx-1.21.6.tar.gz
unzip master.zip

4. 编译 Nginx 并添加 RTMP 模块

进入解压后的 Nginx 源码目录,编译 Nginx,并添加 RTMP 模块:

cd nginx-1.21.6/
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
make -j4 && sudo make install

成功输出示例

checking for C compiler ... found
...
creating objs/Makefile
Configuration summary+ using system PCRE library+ using system OpenSSL library+ RTMP module added
...

5. 验证 Nginx 安装成功

togevision@TG:~/wzt/my_nginx_rtmp$ /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.21.6

6. 配置环境变量

将 Nginx 添加到环境变量中:

sudo vi ~/.bashrc

在文件末尾添加:

export PATH=$PATH:/usr/local/nginx/sbin/

执行以下命令生效:

source ~/.bashrc

7. 修改 Nginx 配置文件

编辑 Nginx 配置文件:

sudo vim /usr/local/nginx/conf/nginx.conf

在文件末尾添加以下内容以启用 RTMP 模块:

rtmp {server {listen 1935;chunk_size 4096;application live {live on;record off;}}
}

8. 启动 Nginx 服务

nginx

启动后无提示,但可以通过以下命令确认状态


查看 Nginx 是否启动成功

ps -ef | grep nginx | grep -v grep

输出示例

rog      1312637    2257  0 15:51 ?        00:00:00 nginx: master process nginx
rog      1314761 1312637  0 16:01 ?        00:00:06 nginx: worker process

查看端口监听状态

netstat -anp | grep nginx

输出示例

tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN      1312637/nginx: mast
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1312637/nginx: mast
  • 端口 80:HTTP 服务默认监听端口
  • 端口 1935:RTMP 服务默认监听端口

8. 常见问题及解决方法

1. 缺少 zlib

执行以下命令安装:

sudo apt-get install zlib1g-dev

输出示例

Reading package lists... Done
...

2. 找不到 openssl

~/.bashrc 文件中添加 OpenSSL 库位置:

export LD_LIBRARY_PATH=/home/rog/anaconda3/lib:$LD_LIBRARY_PATH
source ~/.bashrc

3. Nginx 端口冲突

如果出现以下错误:

nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

修改 /usr/local/nginx/conf/nginx.conf 中的端口号为 1024 以上的端口,例如 8090


9. 测试推流与播放

必要资源下载:

测试视频下载

Linux下的x86版本 ffmpeg现成库下载

推流命令示例

服务端Ubuntu中推流:

ffmpeg -re -i ../res/video.mp4 -c copy -f flv rtmp://192.168.194.129:1935/live/1

客户端Windows中使用ffplay命令拉流:

ffplay.exe rtmp://192.168.194.129:1935/live/1

播放效果如下:

10. 使用C++ 和FFmpeg库实现相同RTMP效果:

目录结构如下

togevision@TG:~/wzt/av/rtmp_demo$ tree -L 2
.
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   ├── Makefile
│   └── rtmp_demo
├── CMakeLists.txt
├── ffmpeg
│   ├── include
│   ├── lib
│   └── Makefile
├── ffmpeg_x86
│   ├── inc
│   └── lib
├── main.cpp
└── res└── video.mp49 directories, 8 files

main.cpp源码如下,FFmpeg实现RTMP:

#include <iostream>
#include <chrono>
#include <thread>
extern "C" {
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/time.h>
}// ffmpeg -re -i ../res/video.mp4 -c copy -f flv rtmp://192.168.194.129:1935/live/1int main() {const char *input_file = "../res/video.mp4";const char *output_url = "rtmp://192.168.194.129:1935/live/1";// 初始化网络组件avformat_network_init();AVFormatContext *input_ctx = nullptr;if (avformat_open_input(&input_ctx, input_file, nullptr, nullptr) < 0) {std::cerr << "Could not open input file." << std::endl;return -1;}if (avformat_find_stream_info(input_ctx, nullptr) < 0) {std::cerr << "Failed to retrieve input stream information." << std::endl;avformat_close_input(&input_ctx);return -1;}AVFormatContext *output_ctx = nullptr;if (avformat_alloc_output_context2(&output_ctx, nullptr, "flv", output_url) < 0) {std::cerr << "Could not create output context." << std::endl;avformat_close_input(&input_ctx);return -1;}for (unsigned int i = 0; i < input_ctx->nb_streams; i++) {AVStream *in_stream = input_ctx->streams[i];AVStream *out_stream = avformat_new_stream(output_ctx, nullptr);if (!out_stream) {std::cerr << "Failed to allocate output stream." << std::endl;avformat_close_input(&input_ctx);avformat_free_context(output_ctx);return -1;}if (avcodec_parameters_copy(out_stream->codecpar, in_stream->codecpar) < 0) {std::cerr << "Failed to copy codec parameters." << std::endl;avformat_close_input(&input_ctx);avformat_free_context(output_ctx);return -1;}out_stream->codecpar->codec_tag = 0;}if (!(output_ctx->oformat->flags & AVFMT_NOFILE)) {if (avio_open(&output_ctx->pb, output_url, AVIO_FLAG_WRITE) < 0) {std::cerr << "Could not open output URL." << std::endl;avformat_close_input(&input_ctx);avformat_free_context(output_ctx);return -1;}}if (avformat_write_header(output_ctx, nullptr) < 0) {std::cerr << "Error occurred when writing header to output." << std::endl;avformat_close_input(&input_ctx);if (!(output_ctx->oformat->flags & AVFMT_NOFILE))avio_closep(&output_ctx->pb);avformat_free_context(output_ctx);return -1;}int64_t start_time = av_gettime_relative();AVPacket pkt;while (true) {if (av_read_frame(input_ctx, &pkt) < 0)break;AVStream *in_stream = input_ctx->streams[pkt.stream_index];AVStream *out_stream = output_ctx->streams[pkt.stream_index];pkt.pts = av_rescale_q_rnd(pkt.pts, in_stream->time_base, out_stream->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));pkt.dts = av_rescale_q_rnd(pkt.dts, in_stream->time_base, out_stream->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));pkt.duration = av_rescale_q(pkt.duration, in_stream->time_base, out_stream->time_base);pkt.pos = -1;// 计算每帧的发送时间int64_t pts_time = av_rescale_q(pkt.pts, out_stream->time_base, AVRational{1, AV_TIME_BASE});int64_t now_time = av_gettime_relative() - start_time;if (pts_time > now_time) {av_usleep(pts_time - now_time);}if (av_interleaved_write_frame(output_ctx, &pkt) < 0) {std::cerr << "Error writing frame." << std::endl;av_packet_unref(&pkt);break;}av_packet_unref(&pkt);}// 写入尾部信息if (av_write_trailer(output_ctx) < 0) {std::cerr << "Error occurred when writing trailer to output." << std::endl;}// 释放资源avformat_close_input(&input_ctx);if (!(output_ctx->oformat->flags & AVFMT_NOFILE))avio_closep(&output_ctx->pb);avformat_free_context(output_ctx);avformat_network_deinit();std::cout << "Streaming finished successfully!" << std::endl;return 0;
}

cmake代码如下:

cmake_minimum_required(VERSION 3.10)
project(FFmpegRTMPStreaming)# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)# SET(CMAKE_CXX_COMPILER "/home/togevision/toolchain/arm-AX620E-linux-uclibcgnueabihf/bin/arm-AX620E-linux-uclibcgnueabihf-g++")# 指定头文件和库文件的路径
include_directories(${CMAKE_SOURCE_DIR}/ffmpeg_x86/inc)
link_directories(${CMAKE_SOURCE_DIR}/ffmpeg_x86/lib)
# include_directories(${CMAKE_SOURCE_DIR}/ffmpeg/include)
# link_directories(${CMAKE_SOURCE_DIR}/ffmpeg/lib/arm/uclibc)# 添加可执行文件
add_executable(rtmp_demo main.cpp)# 链接FFmpeg库
target_link_libraries(rtmp_demo avformat avcodec avutil swresample)# 执行之前需要指定动态库路径:
# export LD_LIBRARY_PATH=/home/togevision/wzt/av/rtmp_demo/ffmpeg_x86/lib:$LD_LIBRARY_PATH

构建和执行步骤:

# 进入build目录,准备构建makefile
cd build/# 执行cmake
cmake ..# 执行make
make# 查看生成
ls# 指定动态库路径:
export LD_LIBRARY_PATH=/home/togevision/wzt/av/rtmp_demo/ffmpeg_x86/lib:$LD_LIBRARY_PATH# 执行生成的目标程序
./rtmp_demo # windows下使用ffplay或其它播放器播放rtmp
ffplay.exe rtmp://192.168.194.129:1935/live/1

其它

Nginx相关源码库的官网链接:
软件名称下载链接个人使用版本描述
Nginxhttp://nginx.org/en/download.htmlnginx-1.21.6.tar.gz一个高性能的HTTP和反向代理服务器。
Pcrehttps://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz一个正则表达式库。(必须)
Zlibhttp://www.zlib.net/zlib-1.3.1.tar.gz一个开源的数据压缩库,提供了对数据的无损压缩和解压功能。(必须)
Opensslhttps://www.openssl.org/source/openssl-1.1.0l.tar.gz一个开源的加密库,提供了各种加密算法和安全协议的实现。(必须)
http://www.15wanjia.com/news/46125.html

相关文章:

  • 西峡做网站广告推广费用一般多少
  • 徐州市做网站宁波企业seo外包
  • 沈阳微网站制作广州各区进一步强化
  • 漂亮企业网站源码成都官网seo厂家
  • 公众号开发者权限哪里添加宁波seo深度优化平台
  • 潍坊网站快速排名官网
  • 猪八戒网站做推广靠谱吗各大网站域名大全
  • 动漫网页设计作品模板seo排名的影响因素有哪些
  • 如何给网站弄ftp百度seo引流怎么做
  • 网站正在维护中啥意思免费站推广网站在线
  • wordpress如何设置菜单seo搜索引擎优化师
  • 企业网站建设物美价廉竞价推广怎样管理
  • 河南 网站开发广州网站推广服务
  • 网站开发开发公司排名网址模板建站
  • 装饰网站建设方案交换友情链接
  • 找人做网站源代码会给你吗网站seo需要用到哪些工具
  • 上海品划网络做网站南宁百度推广排名优化
  • 手机游戏开发制作公司关键词的分类和优化
  • 做网站一定要正版系统吗软文推广有哪些平台
  • 网站数据丢失广州seo技术外包公司
  • 福州市交通建设集团网站营销推广型网站
  • 做网站卖什么东西好随州seo
  • 电子商务网站策划ppt推广平台收费标准
  • 徐州百度seo排名优化seo试用软件
  • 品牌网站建设可信大蝌蚪收录好的网站
  • 做外贸网站哪家的好百度竞价推广点击软件
  • 互联网下的网络营销余姚网站如何进行优化
  • 网站建设理由网络营销策略理论
  • 网站域名所有权谷歌seo新规则
  • 上海专业做网站排名网络广告投放网站