CN111064972A - 一种基于ipv9的视频直播控制方法 - Google Patents

一种基于ipv9的视频直播控制方法 Download PDF

Info

Publication number
CN111064972A
CN111064972A CN201911192032.5A CN201911192032A CN111064972A CN 111064972 A CN111064972 A CN 111064972A CN 201911192032 A CN201911192032 A CN 201911192032A CN 111064972 A CN111064972 A CN 111064972A
Authority
CN
China
Prior art keywords
nginx
video
server
bullet screen
configuration
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201911192032.5A
Other languages
English (en)
Inventor
张洪涛
田星星
李利荣
吴丹雯
张旭
张泽森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hubei University of Technology
Original Assignee
Hubei University of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hubei University of Technology filed Critical Hubei University of Technology
Priority to CN201911192032.5A priority Critical patent/CN111064972A/zh
Publication of CN111064972A publication Critical patent/CN111064972A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/21Server components or server architectures
    • H04N21/218Source of audio or video content, e.g. local disk arrays
    • H04N21/2187Live feed
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/443OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • H04N21/478Supplemental services, e.g. displaying phone caller identification, shopping application
    • H04N21/4782Web browsing, e.g. WebTV
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/81Monomedia components thereof
    • H04N21/8166Monomedia components thereof involving executable data, e.g. software
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8543Content authoring using a description language, e.g. Multimedia and Hypermedia information coding Expert Group [MHEG], eXtensible Markup Language [XML]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/858Linking data to content, e.g. by linking an URL to a video object, by creating a hotspot
    • H04N21/8586Linking data to content, e.g. by linking an URL to a video object, by creating a hotspot by using a URL

Abstract

本发明涉及一种基于IPV9的视频直播控制方法,包括:实现对主播的PC端的音视频信息采集、实时编码,然后通过流媒体协议把音视频流推送到服务器。接收主播推送的音视频信息,把音视频信息转码切片成TS格式以用于HLS协议拉流。用户通过浏览器访问服务器上的网页资源,然后在网页上选择想要观看的正在直播的主播的直播间,进入直播间会自动播放主播的实时视频。主要通过摄像头采集视频数据和麦克风采集音频数据,经过一系列前处理、编码、封装,然后推流到CDN进行分发。因此,本发明充分发挥了HTML5原生播放环境在多媒体播放上的硬件加速能力,从而极大提升播放性能。

Description

一种基于IPV9的视频直播控制方法
技术领域
本发明涉及一种基于IPV9的视频直播控制方法,属于计算机技术领域。
背景技术
随着通信技术和电子设备制造业的迅速发展,移动端的设备从开始的功能简单的,只能语音通话、发送短信息、发送图片的非智能手机,已经发展到现在的功能非常强大,内容非常丰富的智能手机。智能手机的发展又极大地推动着移动互联网的迅速发展,而移动互联网上的丰富的内容和信息正改变着人们传统的生活方式和通讯方式。人们在满足基本的通讯需求之后,开始追求更方便的生活服务和更个性化的社交及娱乐方式。视频直播正是一种实时互动的社交及娱乐的方式。直播并不是个新鲜的玩意,从更加广泛的角度来看,直播已经有了很久的历史了,只是在不同的时代展示形式不同。古时的戏园茶园也可以算作是直播的范围。到了现代,借助于通讯技术和互联网的发展,人们观看直播的方式多了电视和电脑。近些年,智能手机和移动互联网的发展,让人们基本可以随时随地的观看到自己想看的直播。经过这么多年的发展,特别是最近几年,直播的内容也增多了。最开的电视直播主要是新闻直播和体育赛事的直播,这时直播的门槛还比较高。到了互联网时代,主播有一台电脑就可以开始直播,内容也多是唱歌跳舞,后来由于游戏和电竞的发展又增加了游戏直播内容。近些年随着移动互联网的发展,和3G、4G通信技术的普及,似乎已经发展到了全民“随时随走随播随看”,这时的直播行业已经覆盖到了大部分的人,各种人群都有。
在未来,图片、音频、视频等多媒体业务将还会有较大的增大。在将来,企业的日常办公,线上远程教育,政府部门直播,电商营销直播等会有较大的发展。如何解决在这些应用场景中的问题,以及提高直播视频的质量,降低直播的时延,提高直播的交互性等,这些研究都具有重要的实践意义。
视频直播按照传播方式可以分为两大类:电视直播和网络直播。电视直播最早可以追溯到20世纪50年代的第一次成功的篮球比赛。在这之后电视直播也多用于各种体育赛事的直播、实时新闻的的直播和大型晚会的直播。网络直播的发展时间较短,20世纪90年代的中期中国正式接入互联网,这时互联网上的的网络聊天室可以算是前网络直播阶段。2008年前后,欢聚时代推出的YY语音聊天、刘岩创立的六房间、傅政军的9158等各种秀场直播可以算是互联网时代网络视频直播的雏形。最近的2015年可以算是中国网络直播元年,在2015 年左右国内的上线大量了直播平台,如映客、虎牙、斗鱼、熊猫等。据统计2015国内的网络直播平台达到了200多家,这时视频直播已经由PC端走向了移动端,进入移动互联网时代的直播阶段。
在2015年诞生的各种直播平台其实是借鉴同时期的国外的直播平台,比如Periscope和 Meerkat。国外流行的视频直播平台还有YouTube Live,Twitch,Livestream,afreecaTV等。
对于一家直播平台来说,想要吸引并留住观众,除了要有能满足各种观众的丰富的内容外,还需要有过硬的技术支撑。“不卡顿不掉线低延迟”应该是一个直播平台最低的要求。要满足上述要求,这其中涉及的关键技术有:一是音视频的编解码及压缩和解压缩方案;二是直播系统的服务器性能;三是流媒体传输协议。
音视频的编码及压缩的标准主要是由ITU-T(ITU TelecommunicationStandardization Sector,国际电信联盟电信标准分局)和ISO(InternationalOrganization for Standardization,国际标准化组织)这两个组织制定的。从1984年的H.120到2003年的H.264/MPEG-4AVC (Advanced Video Coding,高级视频编码)。H.264之前的H.263也是主要应用于视频通话和视频会议方面,虽然H.263和H.264都采用的是DTC(Discrete Cosine Transform,离散余弦变换)和DPCM(Differential Pulse CodeModulation,差分脉冲编码调制)混合的编码结构,但是H.264相比于H.263有更大的优势,H.264标准不仅在图像内容预测方面提高了编码效率、改善图像质量,还增加了容错能力和网络适应能力。H.264标准性能的提高是以其复杂度为代价的,所以H.264编解码对CPU的处理能力要求更高。相关专家们也在为下一代的视频编解码标准H.265研究技术方案。
直播系统的服务器性能决定着一个直播平台能否长久存在的关键因素之一。对于直播服务器的要求是:带宽充足、延迟低、存储能力充足、具有故障转移功能。服务器是一种CPU 运算速度更快、负载能力更高、稳定运行时间更长、数据吞吐能力更强的计算机。世界上第一台服务器是1964年,IBM开发的System360大型机,运算速度快,价格贵。此后随着集成电路技术、单晶硅电路技术等多种技术的发展和应用。服务器的体积越来越小,运算性能越来越强价格也越来越低,而且应用于不同场景、满足不同需求的服务器产品被开放出来并推向市场。服务器的硬件是一个服务器系统的基础,服务器软件也是决定服务器系统性能的关键。流媒体服务器是是应用于直播场景的服务器,目前有很多的流媒体服务器软件,有收费的、有开源的。
较为主流的流媒体服务器开源软件有:Red5、live555、FMS(Flash MediaServer)、NGINX 的流媒体插件nginx-rtmp-module等。它们支持的视频文件格式、流媒体传输协议不一样,服务器的性能和应用场景不一样。
比如,Red5支持把MP4、FLV、3GP等格式的视频文件转换成视频流,MP3、AAC等格式的音频文件转成成音频流。其支持RTMP,RTMPT,RTMPS和RTMPE传输协议,具有在线录制,在线聊天,视频会议等基本功能。
优点:完全开源,几乎实现FMS所有功能。比较适合一些小型网站使用。
缺点:基本java的开源流媒体服务器red5.性能较差,稳定性不够,距离稳定、大容量的商业化应用尚有一定的差距。
Live 555是一个跨平台的流媒体解决方案,使用C++发开的开源项目。Live 555支持 mkv,mpg,ogg,mp3和wav等格式的流化。Live 555主要支持RTSP传输协议。
NGINX是一款高性能的HTTP和反向代理服务器,同时也是一IMAP/POP3/SMTP代理服务器。Nginx有着高并发、性能好和占用内存少等特点,而且安装简单,配置文件简单,容易启动。其作为流媒体服务器主要是依赖于NRM(Nginx-rtmp-module)。
优点:部署方便,性能较好,http渐进式下载,支持进度拖拽、防盗链等功能
缺点:不算真正的流媒体服务器,伪流媒体服务器。
Adobe的FMS是流视频和实时通信领域业界领先的解决方案,该产品可以快速搭建起一套流媒体直播、点播服务器。FMS支持的MP4\FLV\F4V\MPEG-TS文件,支持HTTP,RTMP,HLS传输协议。借助于Adobe Flash Player在网络上应用的广泛性,因此,FMS成为诸多多媒体应用的服务器端主要应用平台。
优点:专业厂商产品,性能优良、稳定。多平台支持。借助最新的flash player可以实现 P2P通信。
缺点:是一个商业版本,费用比较贵。
流媒体传输协议。推流基本使用RTMP协议,而拉流播放时CDN会根据不同的用户客户端,通过不同的协议传输数据比如:HLS、RTMP、RTSP等。
HLS(HTTP Live Streaming)是苹果公司开发的标准。HLS是苹果公司最初为iPhone、iPad、 iPod、iTouch等移动设备而开发的流媒体传输协议,为苹果公司的移动设备提供音视频直播和点播方案。因为HLS协议是基于HTTP的,所以HLS继承了HTTP的许多优点。HLS请求使用HTTP传输,所以可以穿过任何允许HTTP数据通过的防火墙或代理服务器,并且允许在网络环境变化时自动切换流。而HTTP允许用户使用普通的Web服务器轻松的将媒体内容部署到流中,而不需要专门的流媒体服务器。因此也可以使用基于HTTP的CDN(ContentDelivery Network,内容分发网络)来传输媒体流。HLS还支持关闭字幕,快速转发,反向播放,备用音视频,插入广告,以及内容保护等功能。
HLS的优势是有代价的,HLS也有一个较大的劣势:HLS直播的视频流延迟较高,一般在10秒以上。如果参数配置不妥当,延时会达到30秒以上,所以对于实时性和互动性要求高的直播场景一般不建议使用HLS。
因为HLS协议在服务器端把一个实时视频在不同的比特率,分辨率和质量级别上创建多个版本的音视频。然后把这多个版本的音视频分割成一系列的文件,这些小文件被称为媒体段。同时会在服务器端为每个版本的音视频创建一个媒体播放列表文件。这些媒体播放列表会保存在M3U格式的文本文件中。然后客户端根据媒体播放列表不断的下载媒体端播放,就实现了直播。
发明内容
本发明采用如下技术方案:
一种基于IPV9的视频直播控制方法,其特征在于,包括:
步骤1、设置服务器端架构,包括Nginx与NRM的安装和配置和Swoole的安装与配置,其中,
Nginx与NRM的安装和配置包括:采用Linux发行版中的Ubuntu 18.04LTS操作系统;本小节实现在Ubuntu 18.04LTS上安装Nginx-1.14.2版本,并配置Nginx服务器正常提供 web服务;
Swoole的安装与配置包括:首先安装PHP-FPM(PHP-fastCGI process manager),执行如下命令即可安装PHP-FPM:sudo apt install php-fpm php-mysql;然后需要修改一下php 进程服务的扩展配置文件www.conf;让php-fpm监听127.0.0.1:9000,配合Nginx使用;配置完PHP之后,还需要修改Nginx的配置文件nginx.conf以让Nginx支持PHP;在需要支持PHP的server段内根据Nginx支持PHP配置文件表添加代码;
步骤2,设置推流端的架构,包括FFmpeg与SDL的配置以及设置推流应用程序;
步骤3,设置网页播放端的架构,具体是用HTML5的video标签直接实现了网页视频播放的功能,没有在网页中嵌入播放Flash播放器;这里使用video.js播放器,video.js有自定义的播放器皮肤、插件、组件、语言选项配置;首先在HTML代码的head标签内引入video.js的CSS文件和JavaScript文件;然后在body标签内新建一个div标签,在div标签内使用video-js标签,并在标签内设置播放器的宽和高等属性;在video-js标签内使用source标签定义视频的资源,即直播音视频流在流媒体服务器中的位置。
在上述的一种基于IPV9的视频直播控制方法,Nginx与NRM的安装和配置具体包括:
(1)在安装Nginx之前,要先安装好Nginx需要的工具和库,例如gcc、gcc++、zlib、pcre、openssl;
(2)在Ubuntu终端(Terminal)输入如下命令即可:sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
(3)然后在命令行输入如下命令下载Nginx-1.14.2:wget http://nginx.org/download/nginx-1.14.2.tar.gz
(4)解压Nginx-1.14.2.tar.gz命令:tar-zxvf nginx-1.14.2.tar.gz
(5)编译安装Nginx命令:./configure和make&&sudo make install
(6)等待编译完成,并输出:make[1]:离开目录“/XXX/XXX/nginx-1.14.2”;表明Nginx安装成功;接下来是配置Nginx提供HTTP服务,并用浏览器验证是否配置成功;
(7)进入Nginx的配置文件夹,用vim编辑器打开Nginx的默认配置文件——nginx.conf;然后输入如下配置,保存并退出;不需要重启Nginx,只需让Nginx重新加载配置文件,即可让Nginx按照配置文件运行;然后用浏览器打开“localhost”,确定 Nginx的HTTP服务配置正常;
然后让Nginx重新加载配置,即可让Nginx支持RTMP协议和HLS协议;接下来用OBS直播软件和VLC播放器测试Nginx是否支持RTMP推流和HLS拉流。
在上述的一种基于IPV9的视频直播控制方法,接下来是实现弹幕功能;网页播放端的架构还包括设置弹幕,包括:
步骤3.1、首先设置一个输入弹幕的HTML表单用input标签实现,发送按钮用button 标签实现;弹幕的开关控制和透明度控制,分别使用了checkbox类型的input标签和range 类型的input标签;然后用CSS设置弹幕输入框,弹幕发送按钮,弹幕开关的样式;要能发送弹幕还需要JavaScript来操作HTML的元素,以及用JavaScript来建立与服务器的websocket连接;
步骤3.2、实现弹幕的显示,首先要从弹幕输入框中读取到用户输入的信息,当用户点击发送按钮的时候立即获取输入框中的内容;要用到document.getElementById()方法,根据元素的ID找到HTML标签节点,返回一个对象;返回的对象有一个value属性,既是标签的内容值;
步骤3.3、获取到弹幕输入框输入框数据后简单的用正则表达式判断一下,用户输入的弹幕是否合法;如果用户输入的弹幕不合法,则弹出一个提示框,提示用户从新输入;如果用户输入的弹幕合法,则将value属性的值发送给服务器;然后由服务器再继续处理;
步骤3.4、客户端要把弹幕发送给服务器,首先需要建立客户端与浏览器websocket连接;首先使用WebSocket构造函数新建一个WebSocket实例对象,并把服务器的地址给进去,然后客户端就会与服务器进行连接;服务器与客户端的连接建立以后,用新建的WebSocket 实例对象的onopen、onclose、onmessage和onerror属性绑定WebSocket实例对象的事件,用send()方法向服务器发送数据,具体包括
(1):websocket.onopen:用于指定连接成功的回调函数;
(2):websocket.onclose:用于指定连接关闭后的回调函数;
(3):websocket.onerror:用于指定报错时的回调函数;
步骤3.5、当接收到服务器发送回来的弹幕消息时,用document.createElement("span") 方法生成一个span标签用于显示弹幕;用append()方法把新生成的span元素添加到指定的 HTML标签节点下,即实现了弹幕功能。
因此,本发明具有如下优点:1)直播的视频流延迟低;2)采用HTML5多媒体流式播放模型,充分发挥了HTML5原生播放环境在多媒体播放上的硬件加速能力,从而极大提升播放性能;3)CPU资源占比低且耗电量少,用户体验好。
附图说明
图1是直播系统架构图。
图2是服务端架构图。
图3是推流端结构图。
图4是网页播放器结构图。
图5-1是Nginx配置测试图。
图5-2是推流应用程序主界面图。
图5-3是服务器端的运行效果图。
图5-4是推流应用程序的主界面图。
图5-5是直播效果图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
实施例:
1、系统架构。
一个完整的直播系统至少要包含三个部分,分别是直播视频源、直播视频的转发、直播视频的播放器。本系统的设计方案是基于前文所以提到的技术和工具来完成的。本系统能实现实时音视频的采集、音视频的实时推流,然后通过服务器分发音视频,最终让用户看到实时的直播。
整个直播系统由三个模块组成,分别是音视频采集模块、服务器模块、网页播放器模块。
(1)音视频采集模块:实现对主播的PC端的音视频信息采集、实时编码,然后通过流媒体协议把音视频流推送到服务器。
(2)服务器模块:接收主播推送的音视频信息,把音视频信息转码切片成TS格式以用于HLS协议拉流。
(3)网页播放器模块:用户通过浏览器访问服务器上的网页资源,然后在网页上选择想要观看的正在直播的主播的直播间,进入直播间会自动播放主播的实时视频。
2、服务器端架构。
服务器端采用Nginx提供HTTP服务,NRM提供流媒体服务,Swoole创建创建WebSocket 服务器实现客户端和服务器端的双向通信。cpolar内网穿透工具把直播系统的网站公开到互联网上。
服务器端由四个主要的模块组成:Nginx核心模块、Nginx-rtmp-module模块、Swoole模块和cpolar模块。
(1)Nginx核心模块:核心模块时Nginx服务器正常运行必不可少的模块,如同操作系统的内核。它提供了Nginx最基本的核心服务,例如进程管理、权限控制、错误日志记录等。 Nginx的标准HTTP模块支持标准的HTTP的功能。在本系统中,Nginx的核心模块用于处理客户端的HTTP请求。
(2)Nginx-rtmp-module模块:NRM模块是Nginx的第三方模块,是一个基于Nginx的流媒体服务器,在本系统中NRM用于接收推流端推送的流媒体,并把流媒体分割成TS文件,支持播放端HLS拉流。
(3)Swoole模块:用于实现客户端和服务器之间建立websocket长连接,进而实现弹幕消息的发送和接收。
(4)cpolar模块:用于将直播系统的网站公布到互联网上。
3、推流端架构
本直播系统推流端的设计基于FFmpeg和SDL。FFmpeg用于解决音频和视频的采集、编码、封装以及把音视频信息推流到服务器的问题。SDL用于解决推流端视频采集的预览问题。
推流端由七个模块组成:音频采集、视频采集、音频编码、视频编码、音视频封装、音视频推流以及视频预览。
(1)音频采集:通过读取主播电脑的声卡,获取主播声卡的音频采样数据。音频采样数据一般为PCM编码后的数据。
(2)视频采集:通过读取主播电脑的摄像头,采集主播摄像头的像素数据。视频像素数据一般为YUV格式的数据。
(3)音频编码:把音频采样数据压缩成为音频码流,从而降低音频的数据量。本系统的推流端中采用的是AAC编码,可以将音频数据压缩10倍以上。
(4)视频编码:把采集到视频像素数据压缩成为视频码流,从而降低视频的数据量。本系统的推流端中采用的是h.264编码,可以将图像数据压缩100倍以上。
(5)音视频封装:把AAC编码的音频码流和h.264编码的视频码流按照一定的格式封装。本直播系统的推流端中采用的是FLV封装格式,FLV格式包含头文件,数据由大小不固定的Tag构成。
(6)音视频推流:本直播系统的推流采用RTMP协议,把音视频封装后的存储路径改为流媒体服务器的地址即可。FFmpeg会直接把封装的音视频推送到流媒体服务器,需要流媒体服务器支持RTMP协议推流。
(7)视频预览:把采集到视频像素数据预览在电脑屏幕上,以便于主播实时了解推流的视频信息。
4、网页播放器架构
本系统的播放器采用基于HTML5的网页播放器。把网页播放器设计成为一个直播间直播间形式,分为三个功能区:视频播放区、弹幕显示区和用户控制区。
(1)视频播放区:用于播放从服务器获取的实时音视频流。
(2)弹幕显示区:用于显示直播间观众发送的实时弹幕。
(3)用户控制区:用于用户控制播放、暂停、全屏观看以及弹幕的显示与关闭。
根据直播间的功能需求,把网页播放器的设计分为三个模块。视频播放与控制模块、弹幕显示模块以及向服务器发送或接收服务器弹幕信息模块。
(1)视频播放与控制模块:采用HTML5播放视频的标准,video标签。video标签自带的播放控件中有播放、停止、全屏播放、音量控制、进度条等功能。
(2)弹幕输入与控制模块:采用CSS和JavaScript设计。其中CSS用于控制弹幕的样式,例如颜色和字体大小等。JavaScript用于控制弹幕随机显示的位置。
(3)向服务器发送或接收服务器弹幕信息模块::采用JavaScript建立客户端与服务器的websocket连接,用于向服务器发送弹幕信息和从服务器接收弹幕信息。
5、系统实现及测试
本章节将首先会分别对服务器端、推流端和播放端进行详细的设计并分别实现功能。最后一个小节会把服务器端、推流端和播放端连接起来进行直播系统联调。
5.1服务器端架构实现。
5.1.1 Nginx与NRM的安装和配置
Nginx可以在不同的操作系统、不同的环境中安装。本系统采用Linux发行版中的Ubuntu 18.04LTS操作系统。本小节实现在Ubuntu 18.04LTS上安装Nginx-1.14.2版本,并配置Nginx 服务器正常提供web服务。
(1)在安装Nginx之前,要先安装好Nginx需要的工具和库,例如gcc、gcc++、zlib、pcre、openssl。
(2)在Ubuntu终端(Terminal)输入如下命令即可:sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
(3)然后在命令行输入如下命令下载Nginx-1.14.2:wget http://nginx.org/download/nginx-1.14.2.tar.gz
(4)解压Nginx-1.14.2.tar.gz命令:tar-zxvf nginx-1.14.2.tar.gz
(5)编译安装Nginx命令:./configure和make&&sudo make install
(6)等待编译完成,并输出:make[1]:离开目录“/XXX/XXX/nginx-1.14.2”。表明Nginx 安装成功。接下来是配置Nginx提供HTTP服务,并用浏览器验证是否配置成功。
(7)进入Nginx的配置文件夹,用vim编辑器打开Nginx的默认配置文件——nginx.conf。然后输入如下配置,保存并退出。不需要重启Nginx,只需让Nginx重新加载配置文件,即可让Nginx按照配置文件运行。Nginx配置文件修改内容如表4-1所示。
表4-1 Nginx配置文件表
Figure RE-GDA0002412899640000091
Figure RE-GDA0002412899640000101
然后用浏览器打开“localhost”,浏览器打开的网页显示如图5-1所示,即表明Nginx的 HTTP服务配置正常。
然后让Nginx重新加载配置,即可让Nginx支持RTMP协议和HLS协议。接下来用OBS直播软件和VLC播放器测试Nginx是否支持RTMP推流和HLS拉流。
5.1.2 Swoole的安装与配置
因为Swoole是标准的PHP扩展,所以swoole的运行需要PHP的支持。首先安装PHP-FPM (PHP-fastCGI process manager),执行如下命令即可安装PHP-FPM:sudo aptinstall php-fpm php-mysql。然后需要修改一下php进程服务的扩展配置文件www.conf。让php-fpm监听 127.0.0.1:9000,配合Nginx使用。
配置完PHP之后,还需要修改Nginx的配置文件nginx.conf以让Nginx支持PHP。在需要支持PHP的server段内添加表4-3中的代码即可。
表4-3 Nginx支持PHP配置文件表
Figure RE-GDA0002412899640000102
让Nginx重新加载nginx.conf配置文件,然后测试Nginx和PHP的配置是否正常。
5.2推流端的架构实现
在本文的第三章第三小节中已经提出了本直播系统中推流端的设计方案,并把整个推流端的设计方案分为七个小的模块。在本小节中将根据推流端的设计方案和推流端的结构图,利用FFmpeg开源库和SDL开源库使用C/C++开发一个MFC桌面应用程序。
5.2.1 FFmpeg与SDL的配置
5.2.2推流应用程序的实现
本直播系统采用FFmpeg实现音视频源的采集、编码、封装和推流,使用SDL实现采集的音视频的预览。
在读取系统设备之前需要先使用avdevice_register_all()函数注册libavdevice,然后才能实现系统设备的调用。原本从系统的设备采集的是PCM音频采样数据和YUV像素数据,但是 FFmpeg为了统一接口,把所有的输入都认为是一种封装格式。所以在使用libavdevice时,要先使用av_find_input_format()函数查找用于输入的设备。
推流应用程序最开始要进行FFmpeg的各种结构体的初始化,打开输入音频设备和输入视频设备,对输出音频编码器的参数和视频编码器的编码参数分别进行设置。对音频和视频采集时,分别创建音频处理线程和视频采集线程。两个线程独立工作,分别从音频采集设备和视频采集设备读取数据,然后进行解码和编码等操作。最终把音频流和视频流写入到文件中,当两个线程同时向一个文件中写入数据时,需要用到互斥量,当一个线程操作共享数据的时候,把共享数据锁住,操作完后再把锁打开,这样其他线程可以操作共享数据,从而达到保护临界区安全的目的。
如图5-2所示,是推流应用程序的主界面图。从图中可以看出,当主播输入推流地址,然后点击开始推流按钮后就可以开始向流媒体服务器推流。点击菜单栏的帮助选项可以获取推流软件的使用帮助。点击打开预览和关闭预览按钮,主播可以选择是否预览从摄像头采集到的视频信息。
5.3网页播放端的架构实现
本直播系统的网页播放器借鉴了一些大型直播平台的直播间的设计风格。用HTML5的 video标签直接实现了网页视频播放的功能,没有在网页中嵌入播放Flash播放器。这里使用 video.js播放器,video.js有自定义的播放器皮肤、插件、组件、语言等选项配置。首先在HTML 代码的head标签内引入video.js的CSS文件和JavaScript文件。然后在body标签内新建一个 div标签,在div标签内使用video-js标签,并在标签内设置播放器的宽和高等属性。在video-js 标签内使用source标签定义视频的资源,即直播音视频流在流媒体服务器中的位置。代码如表4-4所示。
表4-4 HTML5实现播放器代码表
Figure RE-GDA0002412899640000121
接下来是实现弹幕功能。弹幕功能的实现首先要有一个输入弹幕的HTML表单用input 标签实现,发送按钮用button标签实现。弹幕的开关控制和透明度控制,分别使用了checkbox 类型的input标签和range类型的input标签。然后用CSS设置弹幕输入框,弹幕发送按钮,弹幕开关的样式。关键代码如表4-4所示。
表4-5 HTML5实现弹幕功能代码表
Figure RE-GDA0002412899640000122
以上只是实现了HTML页面的设置,要能发送弹幕还需要JavaScript来操作HTML的元素,以及用JavaScript来建立与服务器的websocket连接。
实现弹幕的显示,首先要从弹幕输入框中读取到用户输入的信息,当用户点击发送按钮的时候立即获取输入框中的内容。要用到document.getElementById()方法,根据元素的ID找到HTML标签节点,返回一个对象。返回的对象有一个value属性,既是标签的内容值。
获取到弹幕输入框输入框数据后简单的用正则表达式判断一下,用户输入的弹幕是否合法。如果用户输入的弹幕不合法,则弹出一个提示框,提示用户从新输入。如果用户输入的弹幕合法,则将value属性的值发送给服务器。然后由服务器再继续处理。
客户端要把弹幕发送给服务器,首先需要建立客户端与浏览器websocket连接。首先使用WebSocket构造函数新建一个WebSocket实例对象,并把服务器的地址给进去,然后客户端就会与服务器进行连接。服务器与客户端的连接建立以后,用新建的WebSocket实例对象的onopen、onclose、onmessage和onerror属性绑定WebSocket实例对象的事件,用send()方法向服务器发送数据。
(1):websocket.onopen:用于指定连接成功的回调函数。
(2):websocket.onclose:用于指定连接关闭后的回调函数。
(3):websocket.onerror:用于指定报错时的回调函数。
当接收到服务器发送回来的弹幕消息时,用document.createElement("span")方法生成一个span标签用于显示弹幕。用append()方法把新生成的span元素添加到指定的HTML标签节点下,即实现了弹幕功能。JavaScript实现websocket连接的关键代码如表4-6所示。
表4-6 JavaScript实现websocket连接关键代码表
Figure RE-GDA0002412899640000131
Figure RE-GDA0002412899640000141
5.4直播系统联调
首先打开Ubuntu 18.04LTS操作系统,开启三个终端,分别进入Nginx启动服务管理文件夹、swoole文件夹和cpolar文件夹。启动Nginx服务器,用php启动websocket服务器和 cpolar工具。接着在Windows操作系统上打开推流应用程序,在URL输入框中输入推流的URL,点击开始推流,即可开始采集主播电脑的摄像头和声卡数据向流媒体服务器推送。观众打开在电脑端或者移动端上打开浏览器输入直播系统的网站即可开始观看直播。服务器端的运行效果如图5-3所示。
最上面的一个终端是用于启动Nginx服务器的。中间的终端是用于启动websocket服务器,websocket服务器已经接收到了观众发送的弹幕信息。
推流应用程序的主界面图如图5-4所示。在界面的上端是URL输入框,当主播输入流媒体服务器的地址后,可以点击开始推流按钮开始推流。
观众打开浏览器输入由cpolar分配的域名,即可进入直播系统的网页,然后开始观看直播。观众可以在页面下方的弹幕输入框中输入弹幕,然后点击发送即可发送弹幕。观看直播的效果图如图5-5所示。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

Claims (3)

1.一种基于IPV9的视频直播控制方法,其特征在于,包括:
步骤1、设置服务器端架构,包括Nginx与NRM的安装和配置和Swoole的安装与配置,其中,
Nginx与NRM的安装和配置包括:采用Linux发行版中的Ubuntu 18.04LTS操作系统;本小节实现在Ubuntu 18.04LTS上安装Nginx-1.14.2版本,并配置Nginx服务器正常提供web服务;
Swoole的安装与配置包括:首先安装PHP-FPM(PHP-fastCGI process manager),执行如下命令即可安装PHP-FPM:sudo apt install php-fpm php-mysql;然后需要修改一下php进程服务的扩展配置文件www.conf;让php-fpm监听127.0.0.1:9000,配合Nginx使用;配置完PHP之后,还需要修改Nginx的配置文件nginx.conf以让Nginx支持PHP;在需要支持PHP的server段内根据Nginx支持PHP配置文件表添加代码;
步骤2,设置推流端的架构,包括FFmpeg与SDL的配置以及设置推流应用程序;
步骤3,设置网页播放端的架构,具体是用HTML5的video标签直接实现了网页视频播放的功能,没有在网页中嵌入播放Flash播放器;这里使用video.js播放器,video.js有自定义的播放器皮肤、插件、组件、语言选项配置;首先在HTML代码的head标签内引入video.js的CSS文件和JavaScript文件;然后在body标签内新建一个div标签,在div标签内使用video-js标签,并在标签内设置播放器的宽和高等属性;在video-js标签内使用source标签定义视频的资源,即直播音视频流在流媒体服务器中的位置。
2.根据权利要求1所述的一种基于IPV9的视频直播控制方法,其特征在于,Nginx与NRM的安装和配置具体包括:
(1)在安装Nginx之前,要先安装好Nginx需要的工具和库,例如gcc、gcc++、zlib、pcre、openssl;
(2)在Ubuntu终端(Terminal)输入如下命令即可:sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
(3)然后在命令行输入如下命令下载Nginx-1.14.2:wget http://nginx.org/download/nginx-1.14.2.tar.gz
(4)解压Nginx-1.14.2.tar.gz命令:tar-zxvf nginx-1.14.2.tar.gz
(5)编译安装Nginx命令:./configure和make&&sudo make install
(6)等待编译完成,并输出:make[1]:离开目录“/XXX/XXX/nginx-1.14.2”;表明Nginx安装成功;接下来是配置Nginx提供HTTP服务,并用浏览器验证是否配置成功;
(7)进入Nginx的配置文件夹,用vim编辑器打开Nginx的默认配置文件——nginx.conf;然后输入如下配置,保存并退出;不需要重启Nginx,只需让Nginx重新加载配置文件,即可让Nginx按照配置文件运行;然后用浏览器打开“localhost”,确定Nginx的HTTP服务配置正常;
然后让Nginx重新加载配置,即可让Nginx支持RTMP协议和HLS协议;接下来用OBS直播软件和VLC播放器测试Nginx是否支持RTMP推流和HLS拉流。
3.根据权利要求1所述的一种基于IPV9的视频直播控制方法,其特征在于,接下来是实现弹幕功能;网页播放端的架构还包括设置弹幕,包括:
步骤3.1、首先设置一个输入弹幕的HTML表单用input标签实现,发送按钮用button标签实现;弹幕的开关控制和透明度控制,分别使用了checkbox类型的input标签和range类型的input标签;然后用CSS设置弹幕输入框,弹幕发送按钮,弹幕开关的样式;要能发送弹幕还需要JavaScript来操作HTML的元素,以及用JavaScript来建立与服务器的websocket连接;
步骤3.2、实现弹幕的显示,首先要从弹幕输入框中读取到用户输入的信息,当用户点击发送按钮的时候立即获取输入框中的内容;要用到document.getElementById()方法,根据元素的ID找到HTML标签节点,返回一个对象;返回的对象有一个value属性,既是标签的内容值;
步骤3.3、获取到弹幕输入框输入框数据后简单的用正则表达式判断一下,用户输入的弹幕是否合法;如果用户输入的弹幕不合法,则弹出一个提示框,提示用户从新输入;如果用户输入的弹幕合法,则将value属性的值发送给服务器;然后由服务器再继续处理;
步骤3.4、客户端要把弹幕发送给服务器,首先需要建立客户端与浏览器websocket连接;首先使用WebSocket构造函数新建一个WebSocket实例对象,并把服务器的地址给进去,然后客户端就会与服务器进行连接;服务器与客户端的连接建立以后,用新建的WebSocket实例对象的onopen、onclose、onmessage和onerror属性绑定WebSocket实例对象的事件,用send()方法向服务器发送数据,具体包括
(1):websocket.onopen:用于指定连接成功的回调函数;
(2):websocket.onclose:用于指定连接关闭后的回调函数;
(3):websocket.onerror:用于指定报错时的回调函数;
步骤3.5、当接收到服务器发送回来的弹幕消息时,用document.createElement("span")方法生成一个span标签用于显示弹幕;用append()方法把新生成的span元素添加到指定的HTML标签节点下,即实现了弹幕功能。
CN201911192032.5A 2019-11-28 2019-11-28 一种基于ipv9的视频直播控制方法 Pending CN111064972A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911192032.5A CN111064972A (zh) 2019-11-28 2019-11-28 一种基于ipv9的视频直播控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911192032.5A CN111064972A (zh) 2019-11-28 2019-11-28 一种基于ipv9的视频直播控制方法

Publications (1)

Publication Number Publication Date
CN111064972A true CN111064972A (zh) 2020-04-24

Family

ID=70299055

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911192032.5A Pending CN111064972A (zh) 2019-11-28 2019-11-28 一种基于ipv9的视频直播控制方法

Country Status (1)

Country Link
CN (1) CN111064972A (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112040253A (zh) * 2020-08-03 2020-12-04 中国人民解放军海军军医大学 一种便携式多源直播互动装置及方法
CN112422997A (zh) * 2020-09-29 2021-02-26 安徽省(水利部淮河水利委员会)水利科学研究院(安徽省水利工程质量检测中心站) 一种水利工程视频无插件、低延时直播方法
CN112492329A (zh) * 2020-10-29 2021-03-12 北京达佳互联信息技术有限公司 直播方法和装置
CN112533016A (zh) * 2020-11-27 2021-03-19 四川弘和通讯有限公司 基于预警信息触发手机html5低延时直播视频的方法
CN112752143A (zh) * 2020-12-30 2021-05-04 北京真视通信息科技发展有限公司 流媒体服务器编码优化方法及装置
CN112995134A (zh) * 2021-02-03 2021-06-18 中南大学 一种三维视频流媒体传输方法与可视化方法
CN113099262A (zh) * 2021-06-08 2021-07-09 北京达佳互联信息技术有限公司 信息展示方法、装置、电子设备及存储介质
CN113852854A (zh) * 2021-08-11 2021-12-28 武汉光庭信息技术股份有限公司 基于Android系统的视频推流拉流实现方法及系统
CN114007138A (zh) * 2021-11-01 2022-02-01 南京淡兰消防科技有限公司 通过rtsp视频流转flv格式实现h5网页端以video控件播放的方法
CN114286138A (zh) * 2021-01-14 2022-04-05 海信视像科技股份有限公司 显示设备、外接设备及多视角比例显示方法
CN114501068A (zh) * 2022-04-07 2022-05-13 鹏城实验室 视频直播方法、架构、系统及计算机可读存储介质
CN114845124A (zh) * 2022-03-21 2022-08-02 广西广播电视信息网络股份有限公司 基于WebSocket同步控制的机顶盒直播方法
CN115174998A (zh) * 2022-05-25 2022-10-11 楼培德 基于未来网络的真4k家庭影院宽带城域网点播系统
CN116074544A (zh) * 2022-11-15 2023-05-05 深圳壹秘科技有限公司 多平台直播方法、系统、设备及介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106371998A (zh) * 2016-09-13 2017-02-01 网易(杭州)网络有限公司 移动应用的测试系统及方法
CN206402329U (zh) * 2017-01-23 2017-08-11 王晔 一种移动式显微镜视频无线共享交互装置
CN107396199A (zh) * 2017-08-02 2017-11-24 武汉斗鱼网络科技有限公司 弹幕数据展示方法及装置、计算机可读存储介质
CN108200452A (zh) * 2018-01-15 2018-06-22 网易(杭州)网络有限公司 一种防止下载的web视频在线播放系统及其控制方法
CN108271033A (zh) * 2016-12-30 2018-07-10 武汉斗鱼网络科技有限公司 一种视频直播方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106371998A (zh) * 2016-09-13 2017-02-01 网易(杭州)网络有限公司 移动应用的测试系统及方法
CN108271033A (zh) * 2016-12-30 2018-07-10 武汉斗鱼网络科技有限公司 一种视频直播方法及装置
CN206402329U (zh) * 2017-01-23 2017-08-11 王晔 一种移动式显微镜视频无线共享交互装置
CN107396199A (zh) * 2017-08-02 2017-11-24 武汉斗鱼网络科技有限公司 弹幕数据展示方法及装置、计算机可读存储介质
CN108200452A (zh) * 2018-01-15 2018-06-22 网易(杭州)网络有限公司 一种防止下载的web视频在线播放系统及其控制方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
@风轻云淡_: "Linux下,使用nginx+ffmpeg+video.js实现直播效果(含centos7环境配置步骤) 原创", 《CSDN论坛》 *

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112040253A (zh) * 2020-08-03 2020-12-04 中国人民解放军海军军医大学 一种便携式多源直播互动装置及方法
CN112422997A (zh) * 2020-09-29 2021-02-26 安徽省(水利部淮河水利委员会)水利科学研究院(安徽省水利工程质量检测中心站) 一种水利工程视频无插件、低延时直播方法
CN112492329A (zh) * 2020-10-29 2021-03-12 北京达佳互联信息技术有限公司 直播方法和装置
CN112533016A (zh) * 2020-11-27 2021-03-19 四川弘和通讯有限公司 基于预警信息触发手机html5低延时直播视频的方法
CN112752143A (zh) * 2020-12-30 2021-05-04 北京真视通信息科技发展有限公司 流媒体服务器编码优化方法及装置
CN114286138A (zh) * 2021-01-14 2022-04-05 海信视像科技股份有限公司 显示设备、外接设备及多视角比例显示方法
CN114286138B (zh) * 2021-01-14 2023-08-18 海信视像科技股份有限公司 显示设备、外接设备及多视角比例显示方法
CN112995134A (zh) * 2021-02-03 2021-06-18 中南大学 一种三维视频流媒体传输方法与可视化方法
CN113099262A (zh) * 2021-06-08 2021-07-09 北京达佳互联信息技术有限公司 信息展示方法、装置、电子设备及存储介质
CN113099262B (zh) * 2021-06-08 2021-08-24 北京达佳互联信息技术有限公司 信息展示方法、装置、电子设备及存储介质
CN113852854A (zh) * 2021-08-11 2021-12-28 武汉光庭信息技术股份有限公司 基于Android系统的视频推流拉流实现方法及系统
CN113852854B (zh) * 2021-08-11 2024-02-23 武汉光庭信息技术股份有限公司 基于Android系统的视频推流拉流实现方法及系统
CN114007138A (zh) * 2021-11-01 2022-02-01 南京淡兰消防科技有限公司 通过rtsp视频流转flv格式实现h5网页端以video控件播放的方法
CN114845124A (zh) * 2022-03-21 2022-08-02 广西广播电视信息网络股份有限公司 基于WebSocket同步控制的机顶盒直播方法
CN114845124B (zh) * 2022-03-21 2024-02-20 广西广播电视信息网络股份有限公司 基于WebSocket同步控制的机顶盒直播方法
CN114501068A (zh) * 2022-04-07 2022-05-13 鹏城实验室 视频直播方法、架构、系统及计算机可读存储介质
CN115174998A (zh) * 2022-05-25 2022-10-11 楼培德 基于未来网络的真4k家庭影院宽带城域网点播系统
CN116074544A (zh) * 2022-11-15 2023-05-05 深圳壹秘科技有限公司 多平台直播方法、系统、设备及介质

Similar Documents

Publication Publication Date Title
CN111064972A (zh) 一种基于ipv9的视频直播控制方法
CN111064973A (zh) 一种基于ipv9的直播系统
US11539989B2 (en) Media content redirection
US10306293B2 (en) Systems and methods of server based interactive content injection
US9344517B2 (en) Downloading and adaptive streaming of multimedia content to a device with cache assist
US7558760B2 (en) Real-time key frame generation
US20170311006A1 (en) Method, system and server for live streaming audio-video file
WO2017063399A1 (zh) 一种视频播放方法和装置
US10887645B2 (en) Processing media data using file tracks for web content
US20110072466A1 (en) Browsing and Retrieval of Full Broadcast-Quality Video
WO2021114845A1 (zh) 互动业务处理方法、系统、设备及存储介质
CN105354002A (zh) 一种实现多屏间视频无缝切换的系统及方法
Durak et al. Evaluating the performance of Apple’s low-latency HLS
Dufourd et al. An MPEG standard for rich media services
US20130046862A1 (en) Method and Apparatus for Callback Supplementation of Media Program Metadata
CN205230019U (zh) 一种实现多屏间视频无缝切换的系统
CN103686209A (zh) 具有多元化机制的转码处理的方法和系统
CN116233490A (zh) 视频合成方法、系统、装置、电子设备及存储介质
CN112532719A (zh) 信息流的推送方法、装置、设备及计算机可读存储介质
KR20140090659A (ko) 멀티미디어 자산을 렌더링하는 방법, 관련 시스템, 미디어 클라이언트 및 관련 미디어 서버
CN106537930A (zh) 多媒体流业务呈现方法和相关装置及相关系统
CN113364728B (zh) 媒体内容接收方法、装置、存储介质和计算机设备
CN106792018A (zh) 集成YouTube应用的低端机顶盒系统及播放YouTube网站视频的方法
Gibbon et al. Browsing and Retrieval of Full Broadcast-Quality Video
CN205139894U (zh) 一种实现多屏间视频无缝切换的终端

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20200424

RJ01 Rejection of invention patent application after publication