QT SDK提供三种方法对MOV文件的video进行不同深度的操作。
1> movie controller:使用controller组件,封装了基本的数据操作,方便播放等操作。
2> movie tools:提供最基本的API接口,可以对流操作或帧操作。
3> Image Compression component:可以进行每一帧的编解码。
下面,用伪代码说明以上三种用法了,具体的代码会在附件中给出或来信向我索取
1> movie controller : 见《[zz]QuickTime SDK》中的第三节QuickTime的Windows编程
可编译的代码: 附件[simpleplayersdi.win.zip]:
在VC6下编译,记住要把Quicktime SDK的头文件件和库文件加入你的工程啊.
2> movie toolbox:
1、 在程序其始处初始化QuickTime媒体层(InitializeQTML)与QuickTime(EnterMovies) 。
2、 建立QuickDraw图形端口与视频窗口(CreatePortAssociation)的联系。
3、 打开视频文件(OpenMovieFile) 并从中提取视频内容(NewMovieFromFile)。
4、 移动时间线到开始位置。
5、 移动movie时间线(GetMovieNextInterestingTime)
6、 设置播放时间点(SetMovieTimeValue),播放image(UpdateMovie, MoviesTask).
7、 移动时间线到下一帧位置,转到5,直到文件末尾。
8、 在程序结束处,中断QuickTime (ExitMovies) 与QuickTime 媒体层(TerminateQTML)。
可编译的代码:附件[movietools.rar]:
在VC6下编译,记住要把Quicktime SDK的头文件件和库文件加入你的工程啊.
3> Image Compression component:
由于用到了component,回稍微增加一些复杂度了。这里只说明解码的流程,编码涉及到更多的参数,以后有时间再探讨了L
1 在程序其始处初始化QuickTime媒体层(InitializeQTML)与QuickTime(EnterMovies) 。
2 建立QuickDraw图形端口与视频窗口(CreatePortAssociation)的联系。
3 打开视频文件(OpenMovieFile) 并从中提取视频内容(NewMovieFromFile)。
4 调用QTCmpr_DeCompressSequence函数,在文件QTDecompress.c中定义。
4.1 创建Component对象
// open an instance of the Standard Image Compression dialog component
OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType);
4.2 得到Picture对象
// get the bounding rectangle of the movie
GetMoviePosterPict(mySrcMovie);
4.3 创建Gworld,设置解码后的数据格式为32bit RGB(k32ARGBPixelFormat)
NewGWorld(&myImageWorld, k32ARGBPixelFormat, &myRect, NULL, NULL, 0L);
4.4 // get the pixmap of the GWorld;
GetGWorldPixMap(myImageWorld);
4.5 set movie to draw into it
SetMovieGWorld(mySrcMovie, myImageWorld, GetGWorldDevice(myImageWorld));
5 移动时间线到开始位置。
6 移动movie时间线(GetMovieNextInterestingTime)
7 设置播放时间点(SetMovieTimeValue),解码 image(MoviesTask).
8 取得解码后的32bit RGB pixmap数据(myPixMap)
9 显示移动时间线到下一帧位置,转到5,直到文件末尾。
10 在程序结束处,中断QuickTime (ExitMovies) 与QuickTime 媒体层(TerminateQTML)
参考代码:附件[qtcompress.win.zip]:
在VC6下编译,记住要把Quicktime SDK的头文件件和库文件加入你的工程啊.