QuickTime SDK - [1]
第一节 QuickTime流式传输
QT流是通过网络将视频从服务器发送到客户的传输方式。与文件传输不同,客户端边下载边播放,而不必等到下载完毕。服务器将视频内容分成包,通过网络发送出去;在接收端,包被重新组装,到来后就可播放。QT支持单播和组播。
接收、播放视频内容
一般的,可通过打开视频文件、SDP文件与URL来打开流视频。通常调用NewMovieFromFile来打开视频文件,也可以调用NewMovieFromDataRef从URL打开视频文件。对实时流视频,URL必须使用RTSP协议。以RTSP URL打开视频的代码如下:
char url[] = \"rtsp://www.mycompany.com/mymovie.mov\";
Handle urlDataRef;
urlDataRef = NewHandle(strlen(url) + 1);
if ( ( err = MemError()) != noErr) goto bail;
BlockMoveData(url, *urlDataRef, strlen(url) + 1);
err = NewMovieFromDataRef(&movieInfo->theMovie, newMovieActive,
nil, urlDataRef, URLDataHandlerSubType);
DisposeHandle(urlDataRef);
应用要可靠的播放实时流视频,必须遵从如下步骤:
以高级视频工具箱或视频导入器打开视频。
不要假定播放的视频轨结构反映了原始视频的轨结构。
使用视频控制器播放视频,或使用新PrePrerollMovie函数在播放前设置流。
显示视频控制器返回的状态信息。
播放视频时准备处理播放错误
准备动态改变视频特征,如高度、宽度等。
不要认为视频立即开始播放。
服务器流式传输视频内容
服务器需要RTP服务软件与RTSP控制器应用传输视频内容,但不需要在服务器上安装QuickTime。如服务器仅充当组播中继,则不需要任何其它软件,以通常方式转发所请求的RTP流。
服务器在QT流视频中使用提示轨将视频打包成RTP流。如服务器发送有提示视频的单播, QuickTime视频控制器将允许用户暂停、快进与快退,这将用到RTSP与服务器通讯。RTP 服务器不需要知道QuickTime 媒体类型或codecs。视频文件中提示轨为将 QuickTime媒体转化为RTP包提供了信息。每个提示轨包含建立特定轨媒体包头所需的数据,也提供了指向媒体数据的指针。RTP服务器要能够充分解析QuickTime视频文件以找到每个提示轨,然后再找到提示轨指向的轨和采样数据。提示轨包括一些必要的预计算值,使服务器创建RTP包更容易。提示轨减少了RTP服务器很多计算量,结果使RTP服务器发送数据更有效。
第二节 QuickTime流式传输服务器(QTSS)端模块
QTSS是一个代码公开、基于标准的流式传输服务器,可运行在多种UNIX操作系统上,如Mac OS Server、Linux、 FreeBSD与Solaris。要使用QTSS编程接口,必须熟悉RTSP、RTP、RTCP与SDP协议。QTSS的核心功能是作为模块实现的,对模块的支持被设计进服务器的核心。可开发独立的模块,在服务器启动后载入;也可将代码与服务器一起编译。两种方法的模块是相同的,不同的是编译方式。
每个QTSS 模块必须实现两个程序:主程序与分派程序。主程序是在QTSS初始化模块时调用,而服务器调用分派模块实现特定目的。
主程序模块:
QTSS_Error MyModule _Main(void*inPrivateArgs)
{
return _stublibrary_main(inPrivateArgs,MyModuleDispatch );
}
分派程序模块:
void MyModuleDispatch (QTSS_Role inRole,QTSS_RoleParamPtr inParams);
2.1 模块角色
角色给模块提供了为执行某种类型处理而已定义好的状态。QTSS_Role定义每个角色的类型,并表示服务器的内部处理状态。一般的,服务器使用对象来交换模块间的信息。
2.2 QTSS对象
QTSS对象为模块从服务器取得数据与向服务器提供数据提供了一条途径。QTSS定义了几个对象,每个对象都有一套预定义的属性。服务器定义了如下一些对象类型描述客户连接和流,RTSP头、连接和请求,全局服务器信息、服务器偏好和错误信息。
QtssRTPStreamObjectType:
单个RTP流相关属性,RTP流对象(RTPStreamObject )是这个对象类型的
事例,调用QTSS_AddRTPStream 创建。
qtssClientSessionObjectType :
客户连接相关属性。
QtssRTSPSessionObjectType:
RTSP客户服务器连接相关属性,RTSP连接对象(RTSPSessionObject ) 是这个对象类型的一个事例。
QtssRTSPRequestObjectType:
单个RTSP请求相关属性,RTSP请求对象(RTSPRequestObject ) 是这个对象类型的一个事例。
qtssRTSPHeaderObjectType :
单个RTSP请求相关的所有RTSP请求头。
QtssServerObjectType:
全局服务器属性,如服务器统计。
QtssPrefsObjectType:
服务器内部偏好存储系统的属性。
qtssTextMessageObjectType :
包含其值将返回给客户的属性。
取得属性值
模块使用存储在对象中的属性与服务器交换信息,因此需要频繁的设置或取得属性值。有些属性是抢先安全的,可在任何时候调用QTSS_GetValuePtr 取得其值;另一些属性是非抢先安全的,必须调用QTSS_GetValue 取得其值。获得对象属性代码如下:
UInt32 MyGetNumCurrentConnections(QTSS_ServerObject inServerObject)
{
//qtssRTPSvrCurConn is a UInt32,so provide a UInt32 for the result.
UInt32 theNumConnections =0;
//Pass in the size of the attribute value.
UInt32 theLength =sizeof(theNumConnections);
//Retreive the value.
QTSS_Error theErr =QTSS_GetValue(inServerObject,qtssRTPSvrCurConn,0,
&theNumConnections,&theLength);
//Check for errors.If the length is not what was expected,return 0.
if ((theErr !=QTSS_NoErr)||(theLength !=sizeof(theNumConnections))
return 0;
return theNumConnections;
}
QTSS_RTSPMethod MyGetRTSPRequestMethod(QTSS_RTSPRequestObject inRTSPRequestObject)
{
QTSS_RTSPMethod*theMethod =NULL;
UInt32 theLen =0;
QTSS_Error theErr =QTSS_GetValuePtr(inRTSPRequestObject,qtssRTSPReqMethod,0,
(void**)&theMethod,&theLen);
if ((theErr !=QTSS_NoErr)||(theLen !=sizeof(QTSS_RTSPMethod))
return -1;//Return a -1 if there is an error,which is not a valid
//QTSS_RTSPMethod index
else
return *theMethod;
}
2.3 QTSS服务
QTSS服务是模块可访问的,可以是服务器提供的内建服务,也可以是另一模块提供的附加服务。例如,日志模块允许其它模块向错误日志中写信息。模块使用回调程序注册、激活服务,与以添加、查找对象属性类似的方式添加、查找服务。
相关新闻
- 多媒体视频编码方式QuickTime2006-08-20 18:17
- 播放基于Java的QuickTime流媒体系列2006-08-14 14:20
- 如何更改QuickTime文件类型关联2006-08-14 14:17
- QuickTime VR2006-08-14 14:15
- Quicktime快速启动影片2006-08-14 14:13
- Quicktime传送现场转播的流式播放媒体RTP/RTSP2006-08-14 14:09
- QuickTime SDK2006-08-14 14:04
- QuickTime介绍2006-08-14 14:01
推荐新闻
- Seachange 视频服务器系04-24
- 如何实现广播电视视音频节目资源网04-23
- 如何依靠视频编解码IP核赚钱?04-11
- 电视摄像造型艺术11-18
- 视频常用名词解释11-18
- 理论:蒙太奇手法11-18
- 吉林电视台数字移动直播车02-02
- 浅谈关于电视节目技术质量的要求及01-05
- H.264解码器测试的“宜”与“10-12
- 我自搭建流媒体服务器10-11
最新新闻
- 县级电视台现场直播的实现04-26
- Seachange 视频服务器系04-24
- 如何实现广播电视视音频节目资源网04-23
- HDTV基础知识:H.264编码04-12
- 如何依靠视频编解码IP核赚钱?04-11
- 关于波分复用无源光网络核心技术分01-22
- 多语种新闻直播演播室系统设计和节01-22
- AVS编码与DSP实现的视频编码12-10
- 影视后期制作的概念与方法11-18
- 专业非线性编辑板卡综述11-18
发表评论