<#--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  -->
<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab">
    <param name="SRC" value="/content/control/stream?contentId=${contentId}" />
    <param name="WIDTH" value="320" />
    <param name="HEIGHT" value="263" />
    <param name="SCALE" value="tofit" />
    <param name="AUTOSTART" value="true" />
    <param name="AUTOPLAY" value="true" />
    <param name="KIOSKMODE" value="false" />
    <embed src="<@ofbizUrl>stream?contentId=${contentId}</@ofbizUrl>" width="320" height="263" scale="tofit"
        autostart="true" autoplay="true" kioskmode="false" target="quicktimeplayer"
              pluginspage="http://www.apple.com/quicktime/download/">
    </embed>
</object>
