流媒体,streaming media,又叫流式媒体,它是一种多媒体表现形式。当供应商将媒体交付至互联网后,数据包分段技术将媒体数据压缩,以流的形式在网络中分段传送,当终端用户想要观看时,通过流媒体客户端对数据流进行解压,媒体会向供应商交付前一样显示出来。即实时播放。
传统方式观看视频文件的过程:视频文件上传到服务器后,用户通过客户端软件将视频全部下载好后,才能观看视频。
流媒体方式:视频文件上传到服务器后,当用户使用客户端软件请求访问(观看)时,数据包通过特殊的压缩方式,将视频文件分成一个个小的数据包,由流媒体服务器向客户端连续的、实时的传送到客户端中,这样用户可以一边观看一边下载,不需要等待视频文件全部下载完后才能观看。
包括顺序流式传输和实时流式传输。
实时传送,适合现场广播,支持随机访问,用户可快进或后退观看后面或前面的内容。前提条件是保证媒体信号带宽与网络带宽匹配,而且该种传输方式必须需要专用实时流协议
顺序下载,在给定时刻,用户只能观看已下载的部分,不能跳到还未下载的部分,这种一般比较适合高质量的短片段,如片头、片尾和广告。
流式传输一般采用HTTP/TCP来传输控制信息,RTP(实时传输协议)和UDP(用户数据包协议)来传输实时数据。
Q:为什么传输实时数据使用UDP而不是TCP?
A:TCP是可靠的传输协议,传输需要经过三次握手,通信双方都需要确认无误后才能开始传输数据,同时TCP开销很大。而UDP则是不可靠的传输协议,通信双方传输数据时无需经过三次握手验证,发送方只需将数据流发送到接收方即可,无需等待接收方的数据响应报文。例如QQ或者微信等一些SNS通信软件的数据传输均采用UDP,用户只需将信息发送给对方即可。
一台服务器传送的数据包只能传递给客户机,采用点到点(P2P)。
允许路由器将数据包复制到多个通道,一对多。
客户端主动发起与服务器连接,允许用户控制媒体流的播放,可以对网络视频进行开始、停止、后退、快进或暂停等操作。
数据包复制发送到网络上所有用户,用户被动接受流不管用户是否需要。
EasyDarwin 是一款开源的流媒体服务器软件。
EasyDarwin 开源流媒体服务器,是高性能开源RTSP流媒体服务器,基于go语言研发,维护和优化:RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、WEB后台管理、分布式负载均衡等功能。
官方网址:EasyDarwin
ffmpeg是完整的跨平台解决方案,用于记录,转换和流传输音频和视频。
网址:FFmpeg
VLC是一个免费的开源跨平台多媒体播放器和框架,可播放大多数多媒体文件以及DVD,音频CD,VCD和各种流协议。
具体过程:流媒体服务器中存在视频库,在流媒体服务器中使用ffmpeg将视频转换为流,然后转发(推流)到EasyDarwin服务中,在PC2上使用VLC或OBS对流媒体服务器中的视频进行拉流,达到观看视频的效果。
从Github中下载EasyDarwin的Windows端安装包,打开EasyDarwin安装文件夹,文件夹中包括下面几个文件和文件夹:
点击【easydarwin.ini】,修改以下选项:
[http]
port=80
default_username=admin
default_password=admin
[rtsp]
port=554
[http]下的【port】指EasyDarwin的Web控制UI的端口号,默认为10008,根据实际需求修改,这里改成80。
【default_username】和【default_password】是Web控制UI的登录用户名和密码,默认均为:admin,根据实际需求修改。
[rtsp]下的【port】指RTSP协议使用的端口号,默认为554,根据实际需求修改。
点击ServiceInstall-EasyDarwin.exe,安装EasyDarwin服务,出现命令提示符,加载完成后按任意键即可,这时EasyDarwin服务已经安装在【服务】中并在后台运行。
打开浏览器,在地址栏输入:http://192.168.82.228,使用用户名和密码登录。
从官网下载:FFmpeg Builds,将文件夹放置相应的目录中(为设置环境变量做准备),打开ffmpeg文件夹,点击bin目录,看到三个应用程序,其中ffmpeg是用来推流用的。
ffmpeg.zeranoe.com will close on Sep 18, 2020, and all builds will be removed. If you’re using Zeranoe FFmpeg Builds in your product, please ensure that you have a hosting strategy in place by the 18th. Thank you to everyone who supported the project along the way!
打开【控制面板】——>【系统和安全】——>【系统】——>【高级系统设置】——>【环境变量】——>【系统变量】——>【Path】——>【新建】,输入(1)中bin文件夹的完整物理目录即可,最后点击【确定】。
准备工作:在C盘中创建一个名为【Videos】的文件夹,将准备好的视频1.mp4和2.mp4移动到该目录下。
打开命令提示符,输入:
ffmpeg -re -i C:\Videos\1.mp4 -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://192.168.82.228/test
# 或者
ffmpeg -re -i C:\Videos\2.mp4 -rtsp_transport udp -vcodec h264 -f rtsp rtsp://192.168.82.228/test2
配置一条名为VLC 554的入站策略,选择特定端口554,TCP连接,允许任何地址连接。
打开浏览器,在地址栏输入:http://192.168.82.228,点击【推流列表】,可以看到,有一个视频正在被转发(推流)到EasyDarwin服务中。
(1)在PC2中安装VLC media player,打开(此步骤较简单,故省略)。
(2)点击【媒体】——>【打开网络串流】.
在URL栏中输入:
rtsp://192.168.82.228/test2
最后点击播放。
该地址是EasyDarwin的Web控制UI的推流列表中的播放地址。
(3)VLC会自动从流媒体服务器中拉取数据流,经过VLC转化为视频播放。(拉流)
返回流媒体服务器,打开EasyDarwin的Web控制UI,在拉流列表中看到,有客户端进行视频观看,传输方式是UDP,下载流量为49.7MB。
至此,一套完整的流媒体服务搭建完成。流媒体服务的搭建需要良好的网络带宽,因此在测试本次实验的时候,尽量使用虚拟机内网流量,这样可以不影响物理机中的WAN流量。