傲瑞组件开发手册(06) -- 推流组件 NPusher

  在直播系统中,我们需要将我们的视频(摄像头、桌面)、声音(麦克风、声卡)推到流服务器上,然后,观看方就可以在PC浏览器和手机浏览器(以及微信)中直接拉流播放。

  NPusher 是傲瑞科技推出的实用组件之一,它可将视频以及声音推到流服务器上。

一.NPusher简介

  当前版本的NPusher组件支持:

1. 音频数据格式:PCM原始数据、AAC编码数据。(采样率:16000,位数:16bit,声道数:1或2)

2. 视频数据格式:RGB24原始图像数据、H264编码数据。

二.NPusher结构

  对于使用者而言,NPusher组件中的主要类结构图如下所示:

  

1. IStreamPusher 是推流器接口。我们可以通过调用PusherFactory的CreatePusher来创建推流器实例。

2. 得到推流器实例后,我们需调用Initialize或者Initialize4OMCS方法将其初始化。

3. 然后再调用PushVideoFrame将相关的视频帧推上去,调用PushAudioFrame将相关的音频帧推上去;

4. 若不再使用就调用Close方法即可。

三.使用接口详细定义  

   public interface IStreamPusher
    {
        /// <summary>
        /// 与流媒体服务器的连接断开时,触发此事件。
        /// </summary>
        event CbSimple Disconnected;

        /// <summary>
        /// 与流服务器连接正常?
        /// </summary>
        bool Connected { get; }

        /// <summary>
        /// 如果输入RGB24图像,是否要上下颠倒。默认值:false。
        /// </summary>
        bool UpsideDown4RGB24 { get; set; }

        /// <summary>
        /// 初始化推流器。
        /// </summary>
        /// <param name="serverIP">流服务器IP</param>
        /// <param name="serverPort">流服务器端口</param>
        /// <param name="hlsEnabled">是否启用HLS(以支持H5播放)</param>
        /// <param name="streamID">流ID</param>
        /// <param name="videoWidth">视频图像宽度</param>
        /// <param name="videoHeight">视频图像高度</param>
        /// <param name="audioDataType">输入的声音数据的类型。采样率:16k,位数:16</param>
        /// <param name="videoDataType">输入的视频数据的类型/param>
        /// <param name="audioChannelCount">声道数/param>
        void Initialize(string serverIP, int serverPort, bool hlsEnabled, string streamID, int videoWidth, int videoHeight, 
                        InputAudioDataType audioDataType, InputVideoDataType videoDataType, int audioChannelCount);
        /// <summary>
        /// 初始化推流器。
        /// </summary>
        /// <param name="serverIP">流服务器URL</param>        
        /// <param name="videoWidth">视频图像宽度</param>
        /// <param name="videoHeight">视频图像高度</param>
        /// <param name="audioDataType">输入的声音数据的类型。采样率:16k,位数:16</param>
        /// <param name="videoDataType">输入的视频数据的类型/param>
        /// <param name="audioChannelCount">声道数/param>
        void Initialize(string rtmpUrl, int videoWidth, int videoHeight, 
                        InputAudioDataType audioDataType, InputVideoDataType videoDataType, int audioChannelCount);


        /// <summary>
        /// 初始化推流器(从OMCS获取音视频数据)。
        /// </summary>
        /// <param name="serverIP">流服务器IP</param>
        /// <param name="serverPort">流服务器端口</param>
        /// <param name="hlsEnabled">是否启用HLS(以支持H5播放)</param>
        /// <param name="streamID">流ID</param>        
        void Initialize4OMCS(string serverIP, int serverPort, bool hlsEnabled, string streamID);

        /// <summary>
        /// 推送视频帧。
        /// </summary>
        /// <param name="videoFrame">视频帧数据</param>
        /// <returns>推送成功则返回true</returns>
        bool PushVideoFrame(byte[] videoFrame);

        /// <summary>
        /// 推送音频帧。
        /// </summary>
        /// <param name="audioFrame">音频帧数据</param>
        /// <returns>推送成功则返回true</returns>
        bool PushAudioFrame(byte[] audioFrame);

        /// <summary>
        /// 关闭并释放推流器。
        /// </summary>
        void Close();
    }       

1. Initialize4OMCS 方法用于将 OMCS 的音视频数据推到流服务器。

2. Initialize方法中audioDataType输入的声音数据类型、videoDataType输入的视频数据类型、audioChannelCount输入的声道数。这些参数要与推送帧的格式一致。

3. UpsideDown4RGB24属性指采集的RGB24图像数据是否要上下颠倒,在初始化前做设置。

四.NPusher Demo 下载

1.Demo示例:推流本地摄像头、麦克风、桌面、声卡  

    下载本Demo源码Oraycn.NPusherDemo.rar

使用 MCapture 可以采集到当前电脑的摄像头或桌面的图像,以及麦克风或声卡的声音数据。然后,就可以使用NPusher将这些数据推送到流服务器。

Demo中,我们使用Nginx作为流服务器。 (关于Nginx作为流服务器的使用,请参见本文文末

  

  注:若选择采集声卡的声音,需将扬声器的格式设置成16位,48000Hz

   

       另外,该demo中,可以同时推送声卡和麦克风的声音(内部使用了混音技术)。

2. Demo示例:在服务端推流或推流远程的摄像头、麦克风、桌面、声卡

     下载本Demo源码OMCS.Demos.SimplestAndPushStream.rar

就像在《远程录制或在服务器端录制语音、视频、屏幕》 中描述的方法一样,结合OMCS,我们也可以在服务端推流或推流远程用户设备(PC、Android、iOS)的摄像头、麦克风、桌面/屏幕。

现在,我们同样是在《OMCS入门Demo》的服务端增加推流功能,可推流指定在线用户的摄像头的视频和麦克风的声音。当然,桌面和声卡也是可以推的,原理是一样的,在demo代码中稍作修改即可。

      

demo示例可按如下运行:

(1)首先,启动Nginx服务器。

(2)其次,启动该demo中的服务端,然后在PC或Android或iOS上,启动一个入门demo的客户端,并使用 aa01 登录。

(3)最后,在服务端界面上选择一个在线用户,如aa01,并点击 “推流”按钮。

请特别注意:

如果是在服务端推流或远程推流,客户端的IMultimediaManager 的 Advanced 的 MaxInterval4DesktopKeyFrame 或 MaxInterval4CameraKeyFrame 必须设置为 1。

multimediaManager.Advanced.MaxInterval4CameraKeyFrame = 1; //若需远程推流摄像头时设置该属性
multimediaManager.Advanced.MaxInterval4DesktopKeyFrame = 1;//若需远程推流桌面时设置该属性

3.附:使用Nginx作为流服务器

1. 部署Nginx服务器

Nginx部署版下载:网盘下载 (提取码:1234),如果已有Nginx程序,也可单独下载配置文件(其中配置开启了hls):nginx.conf

下载好Nginx部署版,并部署到服务器上,其中有3个地方需要根据服务器的配置自行做修改。

  1. conf目录下 nginx.conf 文件中 rtmp 端口,默认是9000,以及http端口,默认是8000 。
  2. html目录下index.html文件(该页面用于在PC浏览器(需flash插件)中访问),打开该文件,在其中设置流服务器的IP
    src: "rtmp://192.168.1.56:9000/hls/"+pqs._parameters.id[0],    //将192.168.1.56改成自己流服务器的IP
  3. html目录下mobile.html文件(该页面用于在手机浏览器中访问,基于HLS),打开该文件,也在其中同样设置流服务器的IP 

    var hls_url = "http://192.168.1.56:8000/hls/" + pqs._parameters.id[0] + ".m3u8"; //将192.168.1.56改成自己流服务器的IP

2.浏览器访问

(1)PC  浏览器访问: http://192.168.1.56:8000/index.html?id=aa01 ,其中aa01为流的ID。(使用Flash Player 插件播放)

(2)手机浏览器访问:  http://192.168.1.56:8000/mobile.html?id=aa01 ,其中aa01为流的ID。(使用 Video.js)

(3)查看Nginx运行状态可访问: http://192.168.1.56:8000/stat 。  

(4)若不想使用 flash player,可以这样做:

         a. 流媒体服务器使用srs,在srs服务器上,将rtmp流转换成 HTTP-FLV 流。

         b. 在网页中嵌入播放插件 flv.js,使用 flv.js 来播放。

 

下载 更多傲瑞组件以及Demo源码 

阅读 更多傲瑞组件开发手册系列文章 

Q Q:168757008 

官网:http://www.oraycn.com/ 

导航

首页

官方网站

联系我们

站内搜索

OrayTalk 企业即时通讯系统

傲瑞通官网

详细说明

客户端下载

OrayMeeting 视频会议系统

详细说明

客户端下载

ESFramework 通信框架

详细说明

SDK与Demo下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK与Demo下载

OMCS FAQ

版本变更记录

OVCS 视频会议Demo

详细说明

源码下载

傲瑞实用组件

SDK下载

H5Media 纯网页音视频交互

NPusher 推流组件

MCapture 语音视频采集组件

MFile 语音视频录制组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

StriveEngine 轻量级的通信引擎

傲瑞组件 FAQ

授权

授权流程

产品选购指南

授权方案说明

授权SDK使用说明

其它

支持信创国产化

SDK使用技巧

联系我们