65.9K
CodeProject 正在变化。 阅读更多。
Home

MOS协议基础

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.52/5 (13投票s)

2009年3月31日

CPOL

3分钟阅读

viewsIcon

62060

MOS协议从介绍到实现

目录

介绍 

我写这篇文章的灵感来自于我的经验。 当我开始研究MOS协议时,我在网络上找不到任何相关资料。 只有一个网站www.mosprotocol.com(MOS协议的官方网站,也许是唯一的)。 我当时决定,一旦我实现了它,我就会分享我的经验和想法。

MOS基础 

什么是MOS

MOS是一种能够存储媒体对象的设备。 媒体对象指的是字符发生器对象:CGs,静态存储,音频和视频。

什么是MOS协议

MOS协议是一种基于XML的协议,用于在NCS(新闻编辑室计算机系统)和MOS设备之间进行通信。

MOS协议的必要性

新闻编辑室计算机系统实现了新闻编辑室操作的自动化,包括从脚本编写/编辑到广播内容。 这个过程涉及许多设备,并且每个设备供应商都有自己的协议来与NCS通信。
媒体行业的巨大发展促使广播行业引入了一种标准协议,用于NRCS和MOS设备之间的通信。

NCS和MOS设备之间的数据交换 

MOS协议允许新闻编辑室计算机系统(NCS)和媒体对象服务器(MOS)使用标准协议交换信息。 此协议支持以下类型的消息交换

1. 媒体对象的描述性数据  

当MOS创建、修改或删除对象时,MOS“推送”描述性信息和指向NCS的指针。 这使得NCS能够“了解”MOS的内容,并使NCS能够对MOS发送的数据执行搜索和操作。

2. 播放列表交换

NCS可以构建并将播放列表信息传输到MOS。 这使得NCS能够控制MOS播放或呈现媒体对象的顺序。

3. 状态交换  

MOS可以通知NCS特定剪辑的状态或整个MOS系统的状态。 NCS可以通知MOS特定播放列表项或运行顺序的状态。

mospic1.JPG

MOS工作流程 

让我分享一下NCS和MOS设备之间信息交换的基本工作流程。 NCS以Rundown对象(有时也称为Runorder)的形式包含数据。 一个Rundown可以包含多个故事,而一个故事可以有多个项目。 每个项目对应于媒体对象,例如CGs,视频文件,音频文件或静态图形。

workflow.JPG

NCS将元数据与这些项目相关联。 元数据信息包括类型、路径、播放时间和时长等。

示例:视频项目元数据

FileName: inauguration.mpeg
StartTime: 12:30:35 10-02-2009
Duration:00:10:30
Video Serve: MOSDEVICE 

NCS将此元数据转换为MOS兼容的XML,并使用TCP连接将其发送到MOS设备。 作为回报,MOS设备将MOS XML响应发送到NCS。
上面元数据的示例MOS XML消息。

<mos>
<mosID>MOSDEVICE</mosID>
<ncsID>NCS</ncsID>
<messageID>507891</messageID>
<roStorySend>
<roID>96857485</roID>
<storyID>5983A501:0049B924:8390EF1F</storyID>
<storySlug>Show Open</storySlug>
<storyNum>C8</storyNum> 
<storyBody>
<storyItem>
<itemID>1</itemID> 
<itemSlug>Hotel Fire vo</itemSlug>
<objID> inauguration</objID>
<mosID>testmos</mosID>
<itemEdStart>12:30:35 10-02-2009</itemEdStart>
<itemEdDur>00:10:30</itemEdDur>
</roStorySend>
</mos>

MOS实现

由于MOS协议是一种基于XML的协议,因此它的实现方式与XML数据交换的标准方式相同。 

基本策略

有许多MOS XML消息,例如<heartbeat>, <roCreate>, <roStorySend>, <roStoryMove>等,对于每条消息,我们使用以下策略

  1. 创建一个确认MOS XML消息之一的类 
  2. 创建该类的对象并设置其属性  
  3. 序列化该对象以获取MOS XML消息
  4. 将MOS XML消息转换为流
  5. 使用TCP连接将流发送到MOS设备 

使用C# .NET 2.0的示例 

我们将创建<heartbeat>消息并将其发送到MOS设备。 <heartbeat> 消息用于验证网络和应用程序的连续性。 

  1. 创建 MOS 和heartbeat 类,该类确认MOS XML消息之一
    //<mos> message
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
    
    namespace mosprotocol
    {
       [XmlRoot("mos")]
       public class cMOS
        {
            string _mosID, _ncsID;
            long _messageID;
            cHeartBeat _heartbeat;
    
            public string mosID
            {
                get {return _mosID; }
                set { _mosID = value; }
            }
    
            public string ncsID
            {
                get { return _ncsID; }
                set { _ncsID = value; }
            }
    
            public long messageID
            {
                get { return _messageID; }
                set { _messageID = value; }
            }
    
           public cHeartBeat heartbeat
            {
                get { return _heartbeat; }
                set { _heartbeat = value; }
            }
        }
    }
    //heartbeat message
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
    
    namespace mosprotocol
    {
        [XmlRoot("heartbeat")]
        public class cHeartBeat
        {
            DateTime _time;
    
            public DateTime time
            {
                get { return _time; }
                set { _time = value; }
            }
        }
    } 
  2. 创建mos 对象并设置其属性
    HeartBeat heartbeat = new cHeartBeat();
    heartbeat.time = DateTime.Now;
    
    //create MOS message and set its heartbeat property
    cMOS mos = new cMOS();
    mos.messageID = 333;
    mos.mosID = "MOSDEVICEID";
    mos.ncsID = "NCSID";
    mos.heartbeat = heartbeat;      
  3. 将对象序列化为内存流
    //serialize MOS object
    MemoryStream ms = new MemoryStream();
    XmlSerializer xml = new XmlSerializer(typeof(cMOS));
    xml.Serialize(ms, mos);          
  4. 通过TCP连接将流发送到MOS设备
    //create TCP connection with MOS device
    TcpClient mosClient = new TcpClient("10.1.0.94", 10641);
             
    //write MOS object stream to MOS device
    mosClient.GetStream().Write(ms.GetBuffer(),0,ms.GetBuffer().Length);

参考文献  

© . All rights reserved.