【问题标题】:Quicktime 7 API for Windows - couldNotResolveDataRef适用于 Windows 的 Quicktime 7 API - couldNotResolveDataRef
【发布时间】:2021-01-31 02:01:02
【问题描述】:

我正在尝试使用适用于 Windows 的 Quicktime 7 API(我知道),因为最终我将尝试更改 Quicktime 文件中的音频通道布局标志,但现在我只是尝试创建一个“电影”对象。

我非常熟悉 Python 和 JavaScript 等语言,但对 C++ 很陌生。尽管如此,我还是能够将以下代码全部链接起来并很好地编译:

#include <iostream>
#include <Movies.h>
#include <QTML.h>


int main()
{
    std::string mystring = "D:/CodingProjects/testfiles/mytestfile.mov";
    OSErr initerr = InitializeQTML(0L);
    OSErr entererr = EnterMovies();

    Movie myMovie;
    short myResID;
    Size mySize = (Size)strlen(mystring.c_str()) + 1;
    Handle myHandle = NewHandleClear(mySize);

    BlockMove(mystring.c_str(), *myHandle, mySize);

    OSErr newmovieerr = NewMovieFromDataRef(&myMovie, 0, &myResID, myHandle, URLDataHandlerSubType);
}

一切似乎运行良好,initerrentererr 返回 0,整个程序也以 0 退出。问题出在 NewMovieFromDataRef 函数中。 newmovieerr 似乎返回代码 -2000 并且没有将任何内容 (0x00000000) 分配给 myMovie。查了一下,原来这个错误码是Quicktime错误,意思是“couldNotResolveDataRef”。

我也尝试使用函数NewMovieFromHandle 创建一个Movie 并得到相同的错误代码。

谁能帮我弄清楚我做错了什么?

【问题讨论】:

    标签: c++ windows quicktime


    【解决方案1】:

    对于任何有兴趣的人。我终于让它与这段代码一起工作了。

    #include <iostream>
    #include <Movies.h>
    #include <QTML.h>
    
    
    int main()
    {
        std::string mystring = "D:\\CodingProjects\\_ffmpeg\\test.mov";
        OSErr initerr = InitializeQTML(0L);
        OSErr entererr = EnterMovies();
    
        CFStringRef inPath = CFStringCreateWithCString(CFAllocatorGetDefault(), mystring.c_str(), CFStringGetSystemEncoding());    
    
        Movie myMovie;
        short myResID;
        Size mySize = (Size)strlen(mystring.c_str()) + 1;
        Handle myHandle = NewHandle(mySize);
        OSType myDataRefType = NULL;
    
        OSErr datareferr = QTNewDataReferenceFromFullPathCFString(inPath, kQTWindowsPathStyle, 0, &myHandle, &myDataRefType);
        OSErr newmovieerr = NewMovieFromDataRef(&myMovie, 0, &myResID, myHandle, myDataRefType);
    
    }
    

    其中很大一部分是在路径中使用\\ 而不是/,还使用CFStringCreateWithCString 获取CFStringRef 以传递给QTNewDataReferenceFromFullPathCFString 以获取正确的Handle 和@987654328 @ 然后传入NewMovieFromDataRef

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2013-11-04
      相关资源
      最近更新 更多