live555中mediaServer的运行结果 - 2013-3-5
LIVE555中RTSP客户端接收媒体流分析及测试代码
LIVE555中RTSP客户端接收媒体流分析及测试代码LIVE555中testProgs⽬录下的testRTSPClient.cpp代码⽤于测试接收RTSP URL指定的媒体流,向服务器端发送的命令包括:DESCRIBE、SETUP、PLAY、TERADOWN。
1. 设置使⽤环境:new⼀个BasicTaskScheduler对象;new⼀个BasicUsageEnvironment对象;2. new⼀个RTSPClient对象;3. 向服务器发送⼀个RTSP “DESCRIBE”命令,以获取stream的SDP描述(description),异步操作:RTSPClient::sendDescribeCommand;4. 处理从服务器端返回的“DESCRIBE”响应:SDP描述,通过SDP描述创建⼀个会话MediaSession,接着为此会话创建数据源对象MediaSubsessionIterator,continueAfterDESCRIBE为回调函数;5. 向服务器发送⼀个RTSP “SETUP”命令,异步操作,在setupNextSubsession函数中:RTSPClient::sendSetupCommand;6. 处理从服务器端返回的”SETUP”响应:创建⼀个MediaSink对象DummySink对象⽤于接收流数据,continueAfterSETUP为回调函数;7. 向服务器发送⼀个RTSP “PLAY”命令,异步操作,在setupNextSubsession函数中:RTSPClient::sendPlayCommand;8. 处理从服务器端返回的”PLAY”响应:设置⼀个定时器⽤于结束接收流,continueAfterPLAY为回调函数;9. 接收流数据,包括⾳频流和视频流,可通过MediaSubsession::mediumName()函数来判断此流是视频流(video)还是⾳频流(audio);可通过MediaSubsession::codecName()函数来判断是采⽤的哪种编码标准;每次接收流的⼤⼩是不同的,可通过frameSize来获取当次接收流的字节数,流数据在fReceiveBuffer中获取;在每次接收视频流数据的开头需要加⼊0x00000001,这样FFmpeg才能成功解码;10. 当出现异常情况或正常结束接收流时会向服务器发送⼀个RTSP “TERADOWN”命令,异步操作,在shutdownStream中:RTSPClient::sendTeardownCommand。
live555mediaserver命令用法
live555mediaserver命令用法(最新版)目录1.介绍 live555mediaserver2.live555mediaserver 的命令用法3.示例:如何使用 live555mediaserver 命令正文live555mediaserver 是一个流行的媒体服务器,用于在网络上直播和流式播放音频和视频。
它可以让用户在任何地方访问媒体库,并收听或观看存储在服务器上的音频和视频。
在这篇文章中,我们将介绍live555mediaserver 的命令用法。
要使用 live555mediaserver,您需要先安装它。
安装完成后,您可以通过命令行界面与 live555mediaserver 进行交互。
以下是一些常用的live555mediaserver 命令:1.启动 live555mediaserver:在命令行中输入“./mediaserver -d -f <配置文件路径>”即可启动 live555mediaserver。
其中,-d 选项表示以守护程序模式运行,-f 选项用于指定配置文件的路径。
2.查看 live555mediaserver 状态:在命令行中输入“./mediaserver -c”即可查看 live555mediaserver 的当前状态。
3.停止 live555mediaserver:在命令行中输入“./mediaserver -k”即可停止 live555mediaserver。
4.重启 live555mediaserver:在命令行中输入“./mediaserver -r”即可重启 live555mediaserver。
5.设置 live555mediaserver 配置:您可以使用文本编辑器修改live555mediaserver 的配置文件,然后重新启动 live555mediaserver以应用更改。
下面是一个示例,演示如何使用 live555mediaserver 命令:首先,确保您已经安装了 live555mediaserver。
windows live555 rtsp流媒体搭建
windowsXP下使用live555搭建视频服务器,并使用ffplay和VLC
播放
本来是要搞linux下的视频服务器,但是总是不成功,现在windowsXp下搭建起来吧!
首先在官网下载live555:
/mediaServer/#downloading
当然是现在windows的版本了!!
上官网下载FFmpeg:
/download.html#releases
也是现在windows版本的!
首先运行live555MediaServer,如下图就是运行起来了!
需要播放的文件一定要和live555MediaServer在一个文件夹下!!!!如图所示
然后打开ffmpeg
开始---程序---运行cmd
进入bin目录找到ffplay
C:\Documents and Settings\zmurder\桌面\ffmpeg-20120726-git-236ecc3-win32-static\bin
dos进入bin目录
运行ffplay.exe rtsp://202.196.117.71/1.mp3
此时弹出播放界面
播放成功!!!!
同样适用VLC播放器可可以播放!!
但是目前还不能播放mp4和avi文件,不知是不是格式不支持。
live555_windows下编译
vs2008编译live555分类:工作问题2011-03-21 10:02 273人阅读评论(0) 收藏举报介绍:四个基本的库分别是ageEnvironment&TaskScheduler用于事件的调度,实现异步读取事件的句柄的设置以及错误信息的输出。
另外,还有一个HashTable类定义了一个通用的hash表,其它代码要用到这个表。
这些都是抽象类,在应用程序中基于这些类实现自己的子类。
2.BasicUsageEnvironmentBasicUsageEnvironment中的类主要是对UsageEnvironment中对应类的实现。
3.groupsockgroupsock类是对网络接口的封装,用于收发数据包。
正如名字本身,Groupsock主要是面向多播数据的收发的,它也同时支持单播数据的收发。
Groupsock定义了两个构造函数Groupsock(UsageEnvironment& env, struct in_addr const& groupAddr,Port port, u_int8_t ttl);Groupsock(UsageEnvironment& env, struct in_addr const& groupAddr,struct in_addr const& sourceFilterAddr,Port port);前者是用于SIM(source-independent multicast)组,后者用于SSM(source-specific multicast)组。
groupsock库中的Helper例程提供了读写socket等函数,并且屏蔽了不同的操作系统之间的区别,这是在GroupsockHelper.cpp文件中实现的。
4.liveMedialiveMedia库中有一系列类,基类是Medium,这些类针对不同的流媒体类型和编码。
基于Live555的实时流媒体传输系统
t h e s a m e t i me , v i d e o c a p t r u e nd a H . 2 6 4 c o d i n g p a r t re a l a s o a d d e , a d c ie h v n i g v i d e o c a p t u r e , H. 2 6 4 c o d n i g ,a n d
Ab s t r a c t : I n t h i s p a p e r , s e c o n d a r y d e v e l o p me n t o f L i v e 5 5 5 o en p s o u r c e p r o j e c t s w a s a c h i e v e d , d e s i g n i n g a n d p r e l i mi n a r y
指现将编码后 的多媒 体文件分片成 一个 一个的压
缩包,然后 由服务器向用户端实时、 连续地 转发. 使用
流式传输 方式用户只需等待几秒 到几 十秒的启动延 时 即可在客户端进 行播放,而不 必像采用传 统的下载 方
为( B e s t . e f o r t ) ,这样往往会造成 数据包 的延时和丢 失, 从而导致媒体 数据播放 不清 晰或者不 同步 的 问题 . 本 文设计 并实现 了一种 基于 L i v 5 5 5 的流媒体解决 方案, 重点针 对 L i v e 5 5 5开源项 目进行二次开发,设计实现 了实时流媒体传 输系统.
输系统.所提出的设计方案有 助于解 决在 网络上传 输多媒体数据的延时和不同步等问题, 从而可提高系统 的健壮 性和可扩展性. 关键词 : 流媒体服务器 : L i v e 5 5 5 , H. 2 6 4
live555
几个重要概念NAL:网络提取层,里面放一些与网络相关的信息Slice是片的意思,264中把图像分成一帧(frame)或两场(field),而帧又可以分成一个或几个片(Slilce);片由宏块(MB)组成。
宏块是编码处理的基本单元live555主要运转的是一个source与sink的循环,sink想要数据,就调用source的getNextFrame,source获取到数据后,再调用afterGettingFrame回调,返回给sink数据,sink处理完后,再调用source的getNextFrame,如此循环。
那么我们这里要实现从摄像机获取数据,那么我们的source就是一个RTPSource,我们又需要将数据以RTP的方式发送给流媒体服务器,那么我们的sink就是一个RTPSink,我们需要打通的就是一个RTPSource到一个RTPSink的过程。
一个完整的流媒体传输系统包含服务器端和客户端两个部分[5][6]。
对于服务器端,其主要任务是读取H.264 视频,从码流中分离出每个NALU 单元,分析NALU 的类型,设置相应的RTP 包头,封装RTP 数据包并发送。
而对于客户端来说,其主要任务则是接收RTP数据包,从RTP 包中解析出NALU 单元,然后送至*进行解码播放。
该流媒体传输系统的框架如图3 所示。
RTP的打包与发送RTP包的发送是从MediaSink::startPlaying函数调用开始的(MediaSink.cpp)这个函数只有最后一句最重要,即continuePlaying函数的调用。
continuePlaying函数是定义在MediaSink类中的纯虚函数,需要到特定媒体的sink子类中实现,对于H264来讲是在H264VideoRTPSink中实现的。
对于H264来讲是在 H264VideoRTPSink继承关系:H264VideoRTPSink->VideoRTPSink->MultiFramedRTPSink->RTPSink->MediaSink。
live555源代码概述
注意,任何应用程序都要处理从 sources 到 sinks 的数据流,但是并非每个这样的数据流都与从网络接口收发数据相对应。
比如,一个服务器应用程序发送RTP数据包的时候用到一个或多个"RTPSink" modules。这些"RTPSink" modules以别的方式接收数据,通常是文件 "*Source" modules (e.g., to read data from a file), and, as a side effect, transmit RTP packets.
struct in_addr const& sourceFilterAddr,
Port port);
前者是用于SIM(source-independent multicast)组,后者用于SSM(source-specific multicast)组。groupsock库中的Helper例程提供了读写socket等函数,并且屏蔽了不同的操作系统之间的区别,这是在GroupsockHelper.cpp文件中实现的。
一个简单的RTSP客户端程序
在另一个文章里,给出了这个简单的客户端的程序的代码,可以通过修改Makefile来裁剪liveMedia,使得这个客户端最小化。此客户端已经正常运行。
首先是OPTION
然后是DESCRIBE
建立Media Session,调用的函数是 MediaSession::createNew,在文件liveMedia/MediaSession.cpp中实现。
UsageEnvironment和TaskScheduler类用于事件的调度,实现异步读取事件的句柄的设置以及错误信息的输出,这些都是抽象类,在应用程序中基于这些类实现自己的子类。
LIVE555 mediaServer 与 VLC
LIVE555 mediaServer 与VLC1.RTSP - Real Time Streaming Protocol 实时流媒体协议1。
在IP网络上,控制流媒体数据传输的应用层协议。
2。
RTSP,提供可扩展的框架,使得流媒体服务器能够提供可控制的,按需传输的实时数据,声音或者视频。
3。
RTSP,数据源可以是现场数据的反馈或者文件。
注意:RTSP对流媒体数据提供暂停、快进等控制。
但是RTSP本身不传输数据,RTSP只是流媒体服务器的远程控制。
RTSP其实就是在Client与Server之间提供协商数据传输的方法或者特定格式。
Client与Server之间流媒体数据传输可以通过TCP、UDP、或者RTP协议。
RTSP消息格式,包括请求消息和应答消息。
请求消息格式:方法URI RTSP版本CR LF消息头CR LF CR LF消息体CR LF方法包括OPTION应答消息中,所有的命令。
URI是接收方的地址,例如:rtsp://192.168.20.136RTSP版本一般是RTSP/1.0每行后面的CR CL表示分隔符。
这需要接收方有相应的理解。
另外消息头部分需要两个CR CL。
应答消息格式:RTSP版本状态码解释CR LF消息头CR LF CR LF消息体CR LFRTSP版本一般是RTSP/1.0。
状态码是一个数值,200表示成功。
解释与状态相对应的文本解释。
简单的RTSP交互过程:1.Client-->Server:OPTION Request //询问Server端有哪些方法,可以使用1.Server-->Client:OPTION Response //Server端应答消息,包括所有可以使用的方法2.Client-->Server:DESCRIBE Request //Client端请求Server端,媒体初始化的描述信息2.Server-->Client:DESCRIBE Response //Server端,应答信息,主要包括SDP3.Client-->Server:SETUP Request //设置会话的属性、传输模式等,提示Server端建立会话3.Server-->Client:SETUP Response //Server端建立会话,返回会话的标识符等信息4.Client-->Server:PLAY Request //Client 请求播放数据4.Server-->Client :PLAY Response //Server端应答消息Server-->Client 发送流媒体数据5.Client--->Server :TEARDOWN Request //Client 请求关闭会话5.Server-->Client : TEARDOWN Response //Server应答消息。
live555mediaserver命令用法
live555mediaserver命令用法摘要:一、前言二、live555mediaserver 命令简介1.命令作用2.命令历史三、live555mediaserver 命令用法详解1.基本命令2.高级命令四、命令示例与实践1.示例一2.示例二五、总结正文:一、前言live555mediaserver 是一款用于实时流媒体数据传输的服务器软件,广泛应用于网络直播、在线教育等领域。
为了更好地使用这款软件,了解并掌握其命令用法至关重要。
本文将详细介绍live555mediaserver 的命令用法,以帮助用户更好地使用该软件。
二、live555mediaserver 命令简介1.命令作用live555mediaserver 命令主要用于配置和控制实时流媒体服务器,包括服务器启动、停止、重启,以及设置服务器参数等。
2.命令历史live555mediaserver 命令最早由美国伊利诺伊大学厄巴纳- 香槟分校开发,随着版本的更新,其功能不断完善,逐渐成为流媒体领域的热门工具。
三、live555mediaserver 命令用法详解1.基本命令(1)启动服务器:./live555mediaserver [options](2)停止服务器:./stop_live555mediaserver [options](3)重启服务器:./restart_live555mediaserver [options]2.高级命令(1)设置服务器参数:./live555mediaserver [options] -p<parameter>=<value>例如:./live555mediaserver -p port=8080(2)查看服务器状态:./live555mediaserver [options] -s例如:./live555mediaserver -s四、命令示例与实践1.示例一假设我们要启动一个名为“example_server”的live555mediaserver 实例,监听8080 端口,并设置日志级别为“info”,可以执行以下命令:./live555mediaserver -p port=8080 -p log_level=info -s -i example_server2.示例二假设我们要停止一个名为“example_server”的live555mediaserver 实例,可以执行以下命令:./stop_live555mediaserver -s -i example_server五、总结本文详细介绍了live555mediaserver 命令的用法,包括基本命令和高级命令,并通过两个示例展示了如何使用这些命令。
流媒体服务器设计文档
Live555流媒体服务器-设计文档1 设计目的以Live555为平台搭建流媒体服务器,支持H.264视频流和G.729音频流两种实时流的直播功能,支持VLC、MPLAYER等标准流媒体客户端软件进行RTSP请求播放。
2 系统框架Live555流媒体服务器接收到来自网络的RTSP请求后,遵循RSTP协议的标准,处理建立RTSP会话的信令流程,并分配相应的资源,建立对应的媒体通道。
开始播放后,从摄像头和麦克风采集的音视频数据,视频数据在BF561子板上进行H.264编码,并将编码后的视频流通过SPORT口,交由BF536底板上的Live555流媒体服务器处理;音频数据直接由Live555流媒体服务器进行G.729编码。
Live555流媒体服务器根据RTSP协商的结果,将编码后的音视频数据封装为RTP数据,发送到请求的客户端。
系统的整体流程如下图1所示:图 1 系统流程说明3 系统设计在live555源码的基础上,进行二次开发。
Live555支持H.264源视频文件的流化,需添加对实时流直播的支持;已有优化的G.729编码库,需要添加在live555中添加对G.729音频编码格式的支持。
3.1 RTSP服务器参考live555源码mediaserver/目录下的live555MediaServer.cpp,实现媒体流请求的点播功能。
客户端(Client)与服务器(Server)之间的RTSP信令交互过程如下图2所示:Client Server图2 RTSP信令交互过程1.RTSP连接的建立过程RTSPServer类用于构建一个RTSP服务器,该类内部定义了一个RTSPClientSession类,用于处理单独的客户会话。
首先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建立set UpOurSocket(ourSocket)在TCP的554(或8554)端口进行监听,然后把连接处理函数句柄(RTSPServer::incomingConnectionHandler)和socket句柄传给任务调度器(taskScheduler)。
庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)
庖丁解⽜-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建⽴过程)live555MediaServer.cpp服务端源码讲解int main(int argc, char** argv) {// Begin by setting up our usage environment:TaskScheduler* scheduler = BasicTaskScheduler::createNew();UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);UserAuthenticationDatabase* authDB = NULL;// Create the RTSP server. Try first with the default port number (554),// and then with the alternative port number (8554):RTSPServer* rtspServer;portNumBits rtspServerPortNum = 554;//先使⽤554默认端⼝建⽴Rtsp ServerrtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);//如果建⽴不成功,使⽤8554建⽴rtsp serverif (rtspServer == NULL) {rtspServerPortNum = 8554;rtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);}if (rtspServer == NULL) {*env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";// exit(1);return -1;}env->taskScheduler().doEventLoop(); // does not returnreturn 0; // only to prevent compiler warning}跟踪进⼊CreateNew函数;DynamicRTSPServer*DynamicRTSPServer::createNew(UsageEnvironment&env,PortourPort,UserAuthenticationDatabase*authDatabase,unsigned reclamationTestSeconds) {if (ourSocket == -1)returnNULL;return new DynamicRTSPServer(env,ourSocket,ourPort,authDatabase,reclamationTestSeconds);}DynamicRTSPServer::DynamicRTSPServer(UsageEnvironment&env,intourSocket,Port ourPort,UserAuthenticationDatabase*authDatabase,unsignedreclamationTestSeconds): RTSPServerSupportingHTTPStreaming(env,ourSocket,ourPort,authDatabase,reclamationTestSeconds) {}⾸先建⽴socket,然后在调⽤DynamicRtspServer的构造函数,DynamicRtspServer继承RTSPServerSupportingHTTPStreaming类; RTSPServerSupportingHTTPStreaming类⼜继承RTSPServer类;RTSPServerSupportingHTTPStreaming类的主要作⽤是⽀持Http;接着看setUpOurSocket函数在前⾯已经讲过;就是建⽴socket;最后我们跟踪进⼊RTSPServer类的构造函数:RTSPServer::RTSPServer(UsageEnvironment& env,int ourSocket, Port ourPort,UserAuthenticationDatabase* authDatabase,unsigned reclamationTestSeconds): Medium(env),fRTSPServerPort(ourPort), fRTSPServerSocket(ourSocket), fHTTPServerSocket(-1), fHTTPServerPort(0),fServerMediaSessions(HashTable::create(STRING_HASH_KEYS)),fClientConnections(HashTable::create(ONE_WORD_HASH_KEYS)),fClientConnectionsForHTTPTunneling(NULL), // will get created if neededfClientSessions(HashTable::create(STRING_HASH_KEYS)),fPendingRegisterRequests(HashTable::create(ONE_WORD_HASH_KEYS)),fAuthDB(authDatabase), fReclamationTestSeconds(reclamationTestSeconds) {ignoreSigPipeOnSocket(ourSocket); // so that clients on the same host that are killed don't also kill us// Arrange to handle connections from others:env.taskScheduler().turnOnBackgroundReadHandling(fRTSPServerSocket,(TaskScheduler::BackgroundHandlerProc*)&incomingConnectionHandlerRTSP,this);}当fRTSPServerSocket收到数据时,调⽤incomingConnectionHandlerRTSP回调函数,继续跟进到incomingConnectionHandlerRTSP函void RTSPServer::incomingConnectionHandlerRTSP(void* instance,int/*mask*/) {RTSPServer* server = (RTSPServer*)instance;server->incomingConnectionHandlerRTSP1();}void RTSPServer::incomingConnectionHandler(int serverSocket) {struct sockaddr_in clientAddr;SOCKLEN_T clientAddrLen = sizeof clientAddr;int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen);if (clientSocket < 0) {int err = envir().getErrno();if (err != EWOULDBLOCK) {envir().setResultErrMsg("accept() failed: ");}return;}makeSocketNonBlocking(clientSocket);increaseSendBufferTo(envir(), clientSocket, 50*1024);#ifdef DEBUGenvir() << "accept()ed connection from " << AddressString(clientAddr).val() << "\n";#endif// Create a new object for handling this RTSP connection:(void)createNewClientConnection(clientSocket, clientAddr);}当收到客户的连接时需保存下代表客户端的新socket,以后⽤这个socket与这个客户通讯。
Live555流媒体服务器
最近因项目开发需要,开始学习开源项目live555,特别将个人的一些学习心得做一下记录,如有理解不正确之处,欢迎各位朋友指出。
首先是源码的下载,这可以从上下载,同时上面亦提供了相关的文档,文档虽较为粗糙,但总比找不到任何文档说明强。
当然,我在学习的过程中,也从网上查找了一段时间,收获还是有一点的,其中就有诸如:RTSP服务器实例live555源代码分析、live555源代码简介、live555代码解读系列、基于live555的rtp-rtcp研究等文章。
我的学习是在VS2008环境下进行的,要能够在VS环境下顺利进行,还得做相关工作。
live开源虽说是用C++写的,代码风格也非常优秀,但是其是用makefile文件来做的,而对未接触过makefile文件的我是一个问题。
幸运的是在网上偶然发现了一篇介绍在VC6环境下编译live的文章,然后照着上面所说的做,磕磕碰碰,编译成功了四个库并转移到了VS2008环境中。
更幸运的是又是偶然在网上发现了一篇介绍用VS2008编译live的文章并提供了编译后的工程下载,download,然后就开始了相对漫长的学习过程。
从程序的结构来看,live项目包括了四个基本库、程序入口类(在mediaServer中)和一些测试代码(在testProgs中)。
四个基本库是UsageEnvironment、BasicUsageEnvironment、groupsock和liveMedia。
UsageEnvironment包括抽象类UsageEnvironment和抽象类TaskScheduler,这两个类用于事件调度,其中包括实现了对事件的异步读取、对事件句柄的设置及对错误信息的输出等;该库中还有一个HashTable,这是一个通用的HashTable,在整个项目中都可以使用它,当然该HashTable也是一个抽象类。
BasicUsageEnvironment中的类主要是对UsageEnvironment中对应类的实现。
live555原理
Live555原理详解1. 基本概念Live555是一个开源的多媒体流传输库,用于实现实时的音视频流传输。
它提供了一套完整的音视频流传输解决方案,包括了媒体的描述、传输协议的选择、媒体数据的获取和发送等功能。
Live555可以用于构建流媒体服务器和客户端,支持常见的音视频传输协议,如RTSP、RTCP、RTP、SDP等。
以下将详细解释Live555的基本原理。
2. 媒体描述在使用Live555传输媒体流之前,需要先对媒体进行描述。
描述媒体的格式通常使用SDP(Session Description Protocol)。
SDP是一种文本协议,用于描述多媒体会话的参数。
SDP文件中包含了媒体的类型、编码格式、传输地址等信息。
Live555通过解析SDP文件,可以获取到媒体的相关参数,以便于进行后续的传输。
3. 传输协议选择Live555支持多种传输协议,包括RTSP(Real-Time Streaming Protocol)、RTCP(Real-Time Control Protocol)、RTP(Real-Time Transport Protocol)等。
RTSP是一个应用层协议,用于控制流媒体服务器和客户端之间的会话。
RTCP是RTSP的一个补充协议,用于传输控制信息和统计数据。
RTP是一种实时传输协议,用于传输音视频数据。
在传输媒体流之前,Live555需要根据媒体的描述和网络环境选择合适的传输协议。
例如,如果媒体的描述中指定了使用RTSP协议进行传输,Live555就会使用RTSP协议与流媒体服务器建立会话,并通过RTCP和RTP协议传输音视频数据。
4. 媒体数据获取在与流媒体服务器建立会话之后,Live555需要从服务器获取媒体数据。
Live555通过与流媒体服务器进行交互,发送相应的请求命令,获取媒体数据的位置和大小等信息。
根据服务器的响应,Live555可以知道媒体数据的存储位置,如文件路径或网络地址。
live555原理
live555原理live555原理解析什么是live555live555是一个开源的多媒体流媒体库,用于处理RTSP(Real Time Streaming Protocol)流媒体协议和SDP(Session Description Protocol)会话描述协议。
它提供了一系列的C++类,用于实现流媒体服务器和客户端应用程序。
RTSP及SDP简介•RTSP:实时流媒体传输协议(Real Time Streaming Protocol),用于控制多媒体服务器和客户端之间的数据传输,支持实时流媒体的控制和媒体会话的描述。
•SDP:会话描述协议(Session Description Protocol),用于描述多媒体会话相关参数,如媒体类型、媒体格式、媒体数据的地址等。
live555实现的功能•实现了RTSP客户端和服务器端的协议栈,支持媒体流的传输和控制。
•支持常见的媒体格式,如、MPEG-2、AAC等。
•提供了多种流媒体服务器和客户端的样例程序,方便开发者进行学习和开发。
live555的工作原理1.创建和初始化RTSP服务器或客户端对象。
2.解析SDP文件,获取媒体描述信息。
3.根据SDP文件中的媒体描述信息,设置相关参数,如媒体类型、传输协议、传输地址等。
4.创建传输层(transport)对象,用于建立和维护与对端的传输连接。
5.根据实际需求,选择相应的传输协议,如UDP、TCP或组播(multicast)等。
6.根据传输协议的不同,建立相应的传输连接,如通过UDP建立RTP/RTCP传输,通过TCP建立或复用RTSP连接。
7.启动传输过程,发送或接收媒体流数据。
8.处理传输过程中的控制命令,如PLAY、PAUSE、TEARDOWN等,并相应处理服务器或客户端的状态变化。
live555的优势和应用领域•简单易用:live555提供了一套简洁、直观的API,降低了开发者的学习成本。
•开源免费:live555作为开源项目,可以免费获取、使用和修改。
1.live555源码分析----RSTPServer创建过程分析
1.live555源码分析----RSTPServer创建过程分析最近五⼀回家,终于有机会能安静的看⼀下流媒体这⽅⾯相关的知识,准备分析live555的源码,接下来会把我读源码的过程记录成博客,以供其他的同路⼈参考。
因为再读源码的过程中,并不是⼀路顺着读下来,往往是读到后⾯,才能反过来明⽩之前读的内容,所以有的时候会写的有点穿越感。
在这个过程中,参考了其他⼤⽜的博客,所以⼀些基本概念,就不再重复,也感谢前辈们的贡献。
五⼀在家条件不便,源码只好⽤截图⽅式给出。
下⾯进⼊正题:我们观察live555MediaServer.cpp⾥的main函数,主要做了三件事:1.创建TaskScheduler和UsageEnvironment,⼀个⽤来做调度,⼀个代表运⾏的环境。
2.创建⼀个DynamicRTSPServer,这个继承⾃RSTPServer对象。
3.进⼊死循环,实际上是使⽤select来完成并发⽹络模型。
那这篇⽂章就是主要讲的创建⼀个DynamicRTSPServer到底发⽣了什么(即第⼆条),下⾯这张图是根据源码画出来的(能⼒有限,画的简陋),是创建⼀个DynamicRTSPServer过程中的重要函数调⽤关系:下⾯挑重点讲⼀下:DynamicRTSPServer继承⾃RTSPServer,所以构造DynamicRTSPServer也会构造其⽗类RTSPServer,RTSPServer构造函数如下:其实核⼼代码就是调⽤turnOnBackgroundReadHandling函数,这个函数的代码如下:再追踪:这下就明了了,⾸先⽤assignHandler()把⼀些属性和server socket做⼀个绑定,其次就是使⽤FD_SET把这个server socket加⼊select的相应的集合,为接下来的select死循环做准备。
那么turnOnBackgroundReadHandling()的参数incomingConnectionHandlerRTSP⼜是什么⿁呢?上边说道,这个函数指针会和当前的socket被做⼀个绑定,所以当这个socket接收到数据的时候就会调⽤这个函数(这个以后会细说)。
ubuntu下搭建live555RTSPServer推流
ubuntu下搭建live555RTSPServer推流前⾔ live555是⼀个为流媒体提供解决⽅案的跨平台的C++开源项⽬,它实现了对标准流媒体传输是⼀个为流媒体提供解决⽅案的跨平台的C++开源项⽬,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的⽀持。
Live555实现了对多种⾳视频编码格式的⾳视频数据的流化、接收和处理等⽀持,包括MPEG、H.263+、DV、JPEG视频和多种⾳频编码。
同时由于良好的设计,Live555⾮常容易扩展对其他格式的⽀持。
⽬前,Live555已经被⽤于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。
源码下载ubuntu下安装解压tar -xvf live.2019.03.06.tar.gz进⼊解压⽬录,如下:⽣成makefiles⽂件,后⾯的参数linux-64bit是安装的平台,装在其他平台的话更换为config.后⾯的后缀即可。
./genMakefiles linux-64bitsudo apt-get install libssl-devmake当前⽬录下会⽣成mediaServer ⽂件夹,有⼀个live555MediaServer可执⾏⽂件。
cd mediaServer./live555MediaServer执⾏如下:把⼀个视频或⾳频⽂件放⼊当前⽬录(格式必须为上述列表的格式),运⾏./live555MediaServer即开启的RTSP 服务器。
⽤vlc软件输⼊流媒体的地址即可播放。
如下,可直接使⽤python播放:import cv2if __name__ == '__main__':carId="rtsp://192.168.187.17:80/test.ts"capture = cv2.VideoCapture(carId)# 打开视频sys.argv[1]while True:#读取帧,read()⽅法就是将grab和retrieve整合到了⼀个调⽤函数_,frame = capture.read()if frame is None:breakcv2.imshow('image', frame)cv2.waitKey(1) #让你的程序不直接退出capture.release()cv2.destroyAllWindows()#清除所有show出来的图像\pass。
流媒体服务器设计文档
Live555流媒体服务器-设计文档1 设计目的以Live555为平台搭建流媒体服务器,支持H.264视频流和G.729音频流两种实时流的直播功能,支持VLC、MPLAYER等标准流媒体客户端软件进行RTSP请求播放。
2 系统框架Live555流媒体服务器接收到来自网络的RTSP请求后,遵循RSTP协议的标准,处理建立RTSP会话的信令流程,并分配相应的资源,建立对应的媒体通道。
开始播放后,从摄像头和麦克风采集的音视频数据,视频数据在BF561子板上进行H.264编码,并将编码后的视频流通过SPORT口,交由BF536底板上的Live555流媒体服务器处理;音频数据直接由Live555流媒体服务器进行G.729编码。
Live555流媒体服务器根据RTSP协商的结果,将编码后的音视频数据封装为RTP数据,发送到请求的客户端。
图 1 系统流程说明3 系统设计在live555源码的基础上,进行二次开发。
Live555支持H.264源视频文件的流化,需添加对实时流直播的支持;已有优化的G.729编码库,需要添加在live555中添加对G.729音频编码格式的支持。
3.1 RTSP服务器参考live555源码mediaserver/目录下的live555MediaServer.cpp,实现媒体流请求的点播功能。
客户端(Client)与服务器(Server)之间的RTSP信令交互过程如下图2所示:Client Server图2 RTSP信令交互过程1.RTSP连接的建立过程RTSPServer类用于构建一个RTSP服务器,该类内部定义了一个RTSPClientSession类,用于处理单独的客户会话。
首先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建立s etUpOurSocket(ourSocket)在TCP的554(或8554)端口进行监听,然后把连接处理函数句柄(RTSPServer::incomingConnectionHandler)和socket句柄传给任务调度器(taskScheduler)。
live555
live555live555简介简介Live555 Live555 是一个为流媒体提供解决方案的跨平台的是一个为流媒体提供解决方案的跨平台的C++C++开源项开源项目,它实现了对标准流媒体传输协议如RTP/RTCP RTP/RTCP、、RTSP RTSP、、SIP 等的支持。
持。
Live555Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG MPEG、、H.263+H.263+、、DV DV、、JPEG 视频和多种音频编码。
同时由于良好的设计,Live555非常容易扩展对其他格式的支持。
目前,目前,Live555Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)VLC(VideoLan)、、MPlayer MPlayer。
live555 Streaming Media 框架框架UsageEnvironment 模块是对系统环境的抽象,包括抽象类UsageEnvironment 和TaskScheduler TaskScheduler。
UsageEnvironment 主要用于消息的输入输出和用户交互功能;消息的输入输出和用户交互功能;TaskScheduler TaskScheduler 实现事件的异步处理、事件处理函数的注册等,事件处理函数的注册等,它通过维护一个异步读取源实现对诸如它通过维护一个异步读取源实现对诸如通信消息到达等事件的处理,通过使用DelayQueue 实现对其他注册函数的延时调度。
函数的延时调度。
该模块还包含一个该模块还包含一个HashTable 类,在整个项目中都可以用到它。
程序设计者通过自定义该抽象了类UsageEnvironment 和TaskScheduler 类的子类,类的子类,就可以在特定环境(如就可以在特定环境(如GUI 环境)中运行,不需要进行过多的修改。
行,不需要进行过多的修改。
基于Live555的手机实时直播系统设计与实现
基于Live555的手机实时直播系统设计与实现魏崇毓;张宏琳【摘要】通过对流媒体传输技术、流媒体传输协议、Live555流媒体服务器、socket套接字通信和 H.264视频格式的研究,提出一个基于 Live555流媒体服务器的手机实时监控系统设计方案,实现通过无线网络将手机采集的实时视频数据并发上传至服务器,在服务器中对数据进行流化处理并广播的功能。
针对手机实时直播系统的实时性与并发可靠性要求,设计实现服务器实时直播功能和客户端与服务器网络传输模式,并验证了设计的可行性、系统的实用可靠性。
%Through the research of streaming media transmission technology and protocols,Live5 5 5 streaming media server, socket communication and H.264 video formats,a mobile real-time monitoring system based on Live555 streaming media server was designed.The concurrent uploading of real-time video from the cell phone was achieved via wireless network,and video pro-cessing and broadcasting on the server were realized.Aiming at real-time monitoring and concurrency reliability requirements, the real-time broadcast function and data transmission mode were realized.Results show that the system is feasible and the sys-tem is reliable.【期刊名称】《计算机工程与设计》【年(卷),期】2016(037)005【总页数】5页(P1156-1160)【关键词】实时直播;流媒体服务器;H.264;Live555;socket【作者】魏崇毓;张宏琳【作者单位】青岛科技大学信息科学技术学院,山东青岛 266061;青岛科技大学信息科学技术学院,山东青岛 266061【正文语种】中文【中图分类】TP37随着4G技术的发展和无线网络覆盖的逐渐完善,移动网络的传输速度大幅度提升[1]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运行live555的mediaServer
前提
●宿主机使用win7系统
●安装有virtualbox
●Virtualbox上安装有Ubuntu系统
●Ubuntu和win7上已经编译后生成mediaServer可执行文件
编译方法见live555官网(),或相关文档。
●mediaServer可执行文件的目录下有测试视频文件
部分测试视频见live555官网,或已有的对应格式视频文件。
在linux上(Ubuntu10.04)运行
●使用virtualbox运行Ubuntu,配置桥接网卡
●设置桥接网卡静态ip为192.168.115.110
进入Ubuntu,将/etc/network/interfaces 修改为:
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 192.168.115.110
gateway 192.168.115.1
netmask 255.255.255.0
network 192.168.115.0
broadcast 192.168.115.255
重启网卡:
$ sudo /etc/init.d/networking restart
查看网络配置:
$ ifconfig
eth1 Link encap:Ethernet HWaddr 08:00:27:2e:c1:1b
inet addr:192.168.115.110 Bcast:192.168.115.255 Mask:255.255.255.0
inet6 addr: 2400:dd01:3000:10:a00:27ff:fe2e:c11b/64 Scope:Global
inet6 addr: fe80::a00:27ff:fe2e:c11b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:143 errors:0 dropped:0 overruns:0 frame:0
TX packets:73 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:27502 (27.5 KB) TX bytes:9581 (9.5 KB)
可见ip确实更改。
Ubuntu上运行mediaServer
另一台计算机上运行vlc播放器,打开网络串流:rtsp://192.168.115.110:8554/petrov.m4e
播放效果
在windows上(win7)运行
●IP地址为192.168.115.11
●Win7上运行mediaServer
●另一台计算机上运行vlc播放器,打开网络串流:
rtsp://192.168.115.11/Abraham.Lincoln.Saint.or.Sinner.mkv
打开网络串流:
rtsp://192.168.115.11/slamtv60.264:。