0

环境:win10,vs2015,adobe flash 26,.net framework 4。

我尝试以“ActiveX”方式在 MFC 应用程序中加载video-js-swf 。我已经在 MFC 中加载了带有代码的 .swf 文件。

CString str = _T("path.swf");
m_flash.LoadMovie(0, str);

但我不能使用m_flash.CallFunction()调用.swf文件中的函数,这是我的代码:

CString temp = _T("<invoke name=\"vjs_getProperty\" returntype=\"xml\"><arguments><string>defaultPlaybackRate</string></arguments></invoke>");
CString test = m_flash.CallFunction(temp);

.swf 项目主要代码为: VideoJS.as

有谁知道如何解决这个问题?如何在.swf中调用函数?

4

1 回答 1

0

我想我明白了。这都是关于 xml 字符串的。就我而言,我使用:

CString temp = _T("<invoke name=\"vjs_getProperty\" returntype=\"xml\"><arguments><string>defaultPlaybackRate</string></arguments></invoke>");
CString test = m_flash.CallFunction(temp);

它报告了一个错误。但是当我使用时:

CString temp = _T(R"(<invoke name="vjs_getProperty" returntype="xml"><arguments><string>defaultPlaybackRate</string></arguments></invoke>)");
CString test = m_flash.CallFunction(temp);

或者:

CString temp = _T(R"(<invoke name="vjs_getProperty" returntype="xml"><arguments><string>!CDATA[[defaultPlaybackRate]]</string></arguments></invoke>)");
CString test = m_flash.CallFunction(temp);

没关系。我认为问题出在Flash xml解析器上。解析器以奇怪的方式分析字符串。顺便说一句,似乎<arguments></arguments>必须在同一行。

但是,有一个新的错误,内存泄漏。在 Visual Studio 调试模式下,应用程序无法正常退出。 修复内存泄漏错误: 更改代码

https://github.com/videojs/video-js-swf/blob/master/src/com/videojs/providers/RTMPVideoProvider.as (行:349)

if(_isPlaying){
     _ns.close();
     _isPlaying = false;
     _hasEnded = true;
     _reportEnded = true;
     _model.broadcastEvent(new VideoPlaybackEvent(VideoPlaybackEvent.ON_STREAM_CLOSE, {}));
    _throughputTimer.stop();
    _throughputTimer.reset();
}

替换为

if(_isPlaying){
    _ns.close();
    _videoReference.attachNetStream(null);
    _isPlaying = false;
    _hasEnded = true;
    _reportEnded = true;
    _model.broadcastEvent(new VideoPlaybackEvent(VideoPlaybackEvent.ON_STREAM_CLOSE, {}));
    _throughputTimer.stop();
    _throughputTimer.reset();
    _videoReference.clear();
    _nc.close();
}

然后

符合 .SWF 文件

于 2018-03-01T01:26:12.583 回答