参考   https://blog.csdn.net/cooldragon/article/details/19006835

https://wenku.baidu.com/view/a0bd5ca5284ac850ad02427b.html

D:\CAMTASIA STUDIO\NOI_EMACS_GDB
│  adlcp_v1p3.xsd
│  imscp_v1p1.xsd
│  imsmanifest.xml
│  NOI_emacs_gdb.html
│  NOI_emacs_gdb.js
│  NOI_emacs_gdb.mp4
│  NOI_emacs_gdb.zip                               这是打包了其他所有文件的SCORM包
│  NOI_emacs_gdb_config.xml
│  NOI_emacs_gdb_controller.swf
│  NOI_emacs_gdb_embed.css
│  NOI_emacs_gdb_First_Frame.png
│  NOI_emacs_gdb_player.html
│  playerProductInstall.swf
│  scormwrapper.js

├─scripts
│      config_xml.js
│      handlebars.js
│      jquery-1.7.1.min.js
│      jquery-ui-1.8.15.custom.min.js
│      modernizr.js
│      player-min.js
│      swfobject.js

└─skins
    └─overlay
            player-min.css
            spritesheet.png

实际生成的主要是一个mp4文件,然后SCORM课件就是打包了一堆HTML、XML、JS的zip包(包含了内容包所有文件)

imsmanifest.xml这个文件是主配置文件,顶级元素<manifest>,下面包括3个节点:<metadata>描述内容包整体情况、<organizations>包含学习内容的结构(相同学习内容可以有多种组织形式,一定有一个默认组织形式)、<resources>定义学习包中的资源,如果是4个节点,第4个是(sub)Manifest(s),用来定义下级manifest文件

adlcp_v1p3.xsd和imscp_v1p1.xsd这两个xsd,被主配置文件imsmanifest.xml文件引用,从前缀ADL项目(SCORM模型)和IMS项目(内容打包规范)看,是定义了这两个东西里用到的数据类型之类的构件模块

在主配置文件中,存在类似如下的信息:

<organizations default="TOC1">
      <organization identifier="TOC1">
         <title>Camtasia Video Course</title>
         <item identifier="I_SCO0" identifierref="SCO0">
            <title>Untitled</title>
            <adlcp:masteryscore>0</adlcp:masteryscore>
         </item>

</organization>
   </organizations>

<resources>
      <resource identifier="SCO0" type="webcontent" adlcp:scormType="sco" href="NOI_emacs_gdb.html">
            <file href="NOI_emacs_gdb.html"/>
            <dependency identifierref="ALLRESOURCES" />
         </resource>

<resource identifier="ALLRESOURCES" type="webcontent" adlcp:scormType="asset">
         <file href="NOI_emacs_gdb.html" />
            <file href="scripts/jquery-1.7.1.min.js" />

……

即默认学习内容的组织形式是标识为TOC1的那个,这个组织形式里的项目I_SCO0引用了标识为SCO0的资源。从资源部分可以知道,SCO0资源就是链接到NOI_emacs_gdb.html文件(同时依赖ALLRESOURCES资源),所以,这个html文件就是主入口了。

NOI_emacs_gdb.html文件就是一个普通的网页文件,关键部分是用<iframe>插入了一个html文件NOI_emacs_gdb_player.html:

<body>
<iframe class="tscplayer_inline" name="tsc_player" src="NOI_emacs_gdb_player.html" scrolling="no" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</body>

NOI_emacs_gdb_player.html文件的一些代码如下:

<body οnunlοad="pageUnload();">

<div id="tscVideoContent"></div>

<script type="text/javascript" src="NOI_emacs_gdb.js"></script>
<script type="text/javascript" src="scormwrapper.js"></script>
<script src="scripts/jquery-1.7.1.min.js" ></script>
<script src="scripts/jquery-ui-1.8.15.custom.min.js" ></script>
<script src="scripts/swfobject.js"></script>
<script src="scripts/modernizr.js"></script>
<script src="scripts/handlebars.js"></script>

<script src="scripts/config_xml.js"></script>
<script src="scripts/player-min.js" charset="utf-8"></script>
<script type="text/javascript">
    TSC.playerConfiguration.setFlashPlayerSwf("NOI_emacs_gdb_controller.swf");  这里及以下是有关播放器的一堆设置
    TSC.playerConfiguration.setMediaSrc("NOI_emacs_gdb.mp4");
    TSC.playerConfiguration.setXMPSrc("NOI_emacs_gdb_config.xml");
    
    TSC.playerConfiguration.setAutoHideControls(true);
    TSC.playerConfiguration.setBackgroundColor("#000000");
    TSC.playerConfiguration.setCaptionsEnabled(false);
    TSC.playerConfiguration.setSidebarEnabled(false);
    
    TSC.playerConfiguration.setAutoPlayMedia(false);
    TSC.playerConfiguration.setPosterImageSrc("NOI_emacs_gdb_First_Frame.png");
    TSC.playerConfiguration.setIsSearchable(false);
    TSC.playerConfiguration.setEndActionType("stop");
    TSC.playerConfiguration.setEndActionParam("true");
    TSC.playerConfiguration.setAllowRewind(-1);
    
    TSC.playerConfiguration.setReportScormComplete(true);

TSC.localizationStrings.setLanguage(TSC.languageCodes.ENGLISH);

$(document).ready(
       function (e)
       {
          initSCORM();                在文件NOI_emacs_gdb.js中,调用API和LMS平台通信,初始化学习进度等
          TSC.mediaPlayer.init("#tscVideoContent");   应该在scripts/player-min.js中,在指定div上初始化播放器
          loadPage();                  在文件NOI_emacs_gdb.js中,设置变量completionStatus = "incomplete"
       }
    );
</script>

</body>

调用的API来自scormwrapper.js这个API包装文件,该文件定义了apiCall,findAPI,getAPI,getAPIHandle函数,基本原理是getAPIHandle调用getAPI获得句柄,在apiCall内调用LMS平台的功能前,需要先获取此句柄。而getAPI是调用findAPI从各级父窗口搜索得到句柄的。

在moodle中,查看网页源码,可以看到:

<script type="text/javascript" src="http://10.5.10.74/moodle/lib/javascript.php/1509937333/mod/scorm/request.js"></script>
<script type="text/javascript" src="http://10.5.10.74/moodle/lib/javascript.php/1509937333/mod/scorm/datamodels/scorm_13.js"></script>

后面那个js的末尾,存在以下代码:

M.scorm_api={};

M.scorm_api.init=function(Y,def,cmiobj,cmiint,cmicommentsuser,cmicommentslms,scormdebugging,scormauto,scormid,cfgwwwroot,sesskey,scoid,attempt,viewmode,cmid,currentorg,autocommit){

window.API_1484_11=new SCORMapi1_3(def,cmiobj,cmiint,cmicommentsuser,cmicommentslms,scormdebugging,scormauto,scormid,cfgwwwroot,sesskey,scoid,attempt,viewmode,cmid,currentorg,autocommit)

}

注意到window.API_1484_11这个对象,正是包装文件scormwrapper.js中的函数findAPI中“苦苦”查找的东西:

function findAPI( win )
{
    var findAPITries = 0;
    var theAPI       = null;
    // Search each parent window until we find the API, encounter a window with no parent / the 
    // same as the current window, or have reached our MAX_PARENTS_TO_SEARCH to search threshold
    
    while ( ( win.API_1484_11 == null                  ) 
          && ( win.API         == null                  ) 
          && ( win.parent      != null                  ) 
          && ( win.parent      != win                   ) 
          && ( findAPITries    <= MAX_PARENTS_TO_SEARCH ) )
    {
        findAPITries++;
        win = win.parent;
    }
    if ( win.API_1484_11 != null )
    {
        apiVersion = 1;
        theAPI = win.API_1484_11;
    }
    else if ( win.API != null )
    {
        apiVersion = 0;
        theAPI = win.API;    
    }
    return theAPI;
}

从Camtasia Studio生成的课件看SCORM相关推荐

  1. Camtasia Studio实现画中画视频课件制作方案

    画中画视频课件效果是从三分屏课件演变而来. 三分屏视频课件(常用的是powercreator软件采集生成),由html文件将三个文件组合而成,即左上角教师视频,左下是目录菜单,右边课件视频,但由于加载 ...

  2. Camtasia Studio 9录制高清、超清视频教程

    Camtasia Studio 9录制高清.超清视频教程 实例操作:本课以录制高清视频[熊出没奇幻空间 片段]为例进行高清超清视频的录制并生成高清MP4格式 录制工具:Camtasia Studio ...

  3. 微课微视频制作软件CS(Camtasia Studio)完整学习视频教程-黄波-专题视频课程

    微课微视频制作软件CS(Camtasia Studio)完整学习视频教程-9704人已学习 课程介绍         本课程深入浅出介绍了基于Camtasia Studio软件实现微课制作的方法.整个 ...

  4. Techsmith Camtasia Studio使用分享

    前言:前段时间看了"IT人的转型"深有感触,ITer的范围很大,对于直接面对客户的ITer人,我们一直是在做着最基层的工作,而对于日常客户的培训工作,个人深有感触: 例如,以往我们 ...

  5. Camtasia Studio 专业屏幕录像及视频编辑软件

      Camtasia Studio是一款屏幕录像和编辑的软件套装.软件提供了强大的屏幕录像(Camtasia Recorder).视频的剪辑和编辑(Camtasi Studio).视频菜单制作(Cam ...

  6. camtasia studio 8.2使用技巧集锦

    Q: 我需要使用camtasia studio来录制一段视频,中间会对word文档等有文字的地方加上注释, 我怎么将鼠标设置成绘图的那样,按住一拉就是一个带颜色的方框. 麻烦各位看清楚的我问题再回答, ...

  7. android studio生产签名文件,Android Studio生成keystore签名文件步骤讲解

    Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...

  8. 《微课实战:Camtasia Studio入门精要》——第2章 录制视频 2.1 录制视频基本常识...

    本节书摘来自异步社区<微课实战:Camtasia Studio入门精要>一书中的第2章,第2.1节,作者 于化龙,沈婷婷,郝雨,更多章节内容可以访问云栖社区"异步社区" ...

  9. Android Studio生成keystore签名文件

    Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...

最新文章

  1. ICPC 2005 hangzhou Generator (UVA1358)KMP + 期望DP / 高斯消元
  2. c++面试中遇到的问题
  3. android 提示文字,EditText 不能显示提示文字Hint
  4. hibernate添加spring 事务管理注意问题记录
  5. 计算机网络系统是弱电工程,弱电工程包括哪些类型?常见的问题又有哪些?
  6. SVN自助更新:运维利器Puppet实例讲解
  7. Unity3D场景漫游以及碰撞防止反弹
  8. java统计中英文字数 Java问题通用解决代码
  9. Atitit 功能扩展法细则条例 目录 1. 界面ui扩展 2 1.1. 使用h5做界面 2 1.2. 自制h5 ide。。简化ui自定义配置 2 2. 业务逻辑扩展 2 2.1. Bpm流程引擎还
  10. hexo添加_hexo 添加标签和分类
  11. 产品原型图设计Axure教程-CSDN就业班-专题视频课程
  12. 2021-2027全球与中国全自动探针台市场现状及未来发展趋势
  13. linux系统安装r语言环境,R语言Linux环境安装说明
  14. 创建不带参数的存储过程
  15. java提取图片base64,如何把
  16. 公司是船,我在船上。
  17. Unity UGUI Button 中文详解-Chinar
  18. 解决ps默认打开显卡的设置
  19. Android列表小部件(Widget)开发详解
  20. 软件 测试员必会英语单词,软件测试人员必备的英语单词(一)

热门文章

  1. Python 算法 入门到精通 - LeetCode - 3 :回文数
  2. Attention is all you need pytorch实现 源码解析01 - 数据预处理、词表的构建
  3. ubuntu安装WPS字体:
  4. Google 遭遇 21世纪最大反垄断案,互联网将走向何处?
  5. 零基础小白如何提高学Python的效率?
  6. 小觅智能荣获2018年度AI赋能行业创新明星
  7. MATLAB中输出科学计数法_sprintf函数学习-MATLAB
  8. SSRS日期参数的初始化-设计 SQL
  9. 《Spark商业案例与性能调优实战100课》第25课:Spark Hash Shuffle源码解读与剖析
  10. 为 Konsole 单独设置暗色主题