环境: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 中调用函数?
答案 0 :(得分: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();
}
THEN
编译为.SWF文件