NDK 直播流媒体服务器搭建

NDK 直播流媒体服务器搭建_第1张图片

该文章首发于微信公众号“字节流动”。

本博客 NDK 开发系列文章:

  • NDK 编译的三种方式
  • NDK 开发中引入第三方静态库和动态库
  • NDK 开发中 Native 与 Java 交互
  • NDK POSIX 多线程编程
  • NDK Android OpenSL ES 音频采集与播放
  • NDK FFmpeg 编译
  • NDK FFmpeg 音视频解码
  • NDK 直播流媒体服务器搭建
  • NDK 直播推流与引流
  • NDK 开发中快速定位 Crash 问题

Nginx

Nginx 是由俄罗斯人 Igor Sysoev 编写的轻量级 Web 服务器,发音为 “engine x”,也可用作反向代理和负载均衡器,于 2004 年公开发布,遵循 BSD 开源许可,它以高稳定性、丰富的功能以及低系统开销而出名。Nginx 也是一种模块化的服务器,基于 Nginx 可以灵活添加各种功能模块,如 HTTP 模块、WebSocket 模块、RTMP 模块等,不同模块占用不同的端口,相互独立,如本文中要使用的 RTMP 模块默认端口为 1935 。

本文中的 Nginx 服务器只添加了一个 RTMP 模块,用作一个简单的流媒体服务器。

RTMP 协议

RTMP ( Real Time Message Protocol )协议是一种实时信息传输协议,由 Adobe 公司开发,用来解决多媒体数据传输流的多路复用( Multiplexing )和分包( packetizing )的问题,它是应用层协议,传输层通常基于 TCP 实现。RTMP 协议在前期并未受到太多的重视,近两年随着 VR 以及视频直播领域的火热,RTMP 协议正逐渐成为主流。

直播框架

NDK 直播流媒体服务器搭建_第2张图片

搭建一个简易的直播框架需要三个角色:直播(推流)客户端,流媒体服务器和引流客户端。

安装 Nginx

环境: Ubuntu 16.04 ,注意:若使用阿里云主机需要配置安全组规则,开放 80 、1935 等端口。
NDK 直播流媒体服务器搭建_第3张图片
安装 nginx 和 nginx-rtmp 编译依赖工具:

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

工作目录:

mkdir nginx
chmod +x -R nginx/
cd live

下载 nginx 和 nginx-rtmp 源码:

wget http://nginx.org/download/nginx-1.8.1.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

解压:

# 安装 unzip
# sudo apt-get install unzip
tar -zxvf nginx-1.8.1.tar.gz
unzip master.zip

添加 rtmp-nginx 模块:

cd nginx-1.8.1
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master

编译、安装:

# 编译 nginx 源码
make
# 安装
sudo make install

启动 Nginx 服务:

sudo service nginx start
# sudo service nginx stop 停止

打开浏览器 http://127.0.0.1/ 或者输入阿里云主机的公网 ip :
NDK 直播流媒体服务器搭建_第4张图片
安装 FFmpeg:

sudo apt-get install ffmpeg
# 查看版本信息
ffmpeg -v 

NDK 直播流媒体服务器搭建_第5张图片
配置 nginx 服务器:

# 进入 nginx 安装目录
cd /usr/local/nginx
# 修改配置文件 /usr/local/nginx/conf/nginx.conf
# 在配置文件中添加以下代码
rtmp {
    server {
            listen 1935;
            chunk_size 4096;

            application live {
                    live on;
                    record off;
                    exec ffmpeg -i rtmp://localhost/live/$name -threads 1 -c:v libx264 -profile:v baseline -b:v 350K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp://localhost/live360p/$name;
            }
            application live360p {
                    live on;
                    record off;
        }
    }
}

重启 nginx 服务器:

sudo service nginx restart

到目前为止,一个简单的流媒体服务器搭建完成,接下来将实现服务器与客户端之间的推流和引流。

联系与交流

微信公众号
我的公众号
个人微信
我的微信

你可能感兴趣的:(NDK,Android,NDK,开发)