SdpTime.cxx
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:6k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /* ====================================================================
  2.  * The Vovida Software License, Version 1.0 
  3.  * 
  4.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  5.  * 
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in
  15.  *    the documentation and/or other materials provided with the
  16.  *    distribution.
  17.  * 
  18.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  19.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  20.  *    not be used to endorse or promote products derived from this
  21.  *    software without prior written permission. For written
  22.  *    permission, please contact vocal@vovida.org.
  23.  *
  24.  * 4. Products derived from this software may not be called "VOCAL", nor
  25.  *    may "VOCAL" appear in their name, without prior written
  26.  *    permission of Vovida Networks, Inc.
  27.  * 
  28.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  29.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  30.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  31.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  32.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  33.  * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  34.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  35.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  36.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  37.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  38.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  39.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  40.  * DAMAGE.
  41.  * 
  42.  * ====================================================================
  43.  * 
  44.  * This software consists of voluntary contributions made by Vovida
  45.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  46.  * Inc.  For more information on Vovida Networks, Inc., please see
  47.  * <http://www.vovida.org/>.
  48.  *
  49.  */
  50. static const char* const SdpTime_cxx_Version =
  51.     "$Id: SdpTime.cxx,v 1.18 2001/07/09 23:42:10 bko Exp $";
  52. //#include <assert.h>
  53. #include <cassert>
  54. #include <time.h>
  55. #include <strstream>
  56. #include "SdpSession.hxx"
  57. SdpTime::SdpTime()
  58. : repeatList()
  59. {
  60.     char timeStr[256];
  61.     sprintf(timeStr, "%u", static_cast < unsigned int > (time(NULL) + NTP_UX_DIFF) );
  62.     startTime = timeStr;
  63.     ;
  64.     stopTime = "0";
  65. }    // SdpTime::SdpTime
  66. SdpTime::SdpTime(time_t start, time_t end)
  67. : repeatList()
  68. {
  69.     char timeStr[256];
  70.     sprintf(timeStr, "%u", static_cast < unsigned int > (start + NTP_UX_DIFF) );
  71.     startTime = timeStr;
  72.     sprintf(timeStr, "%u", static_cast < unsigned int > (end + NTP_UX_DIFF) );
  73.     stopTime = timeStr;
  74. }
  75. ///
  76. SdpTime::SdpTime (split_t& timeDescriptionLines)
  77. {
  78.     split_t::iterator linecount = timeDescriptionLines.begin();
  79.     while (linecount != timeDescriptionLines.end())
  80.     {
  81.         if ((*linecount)[0] == 't')
  82.         {
  83.             string s = (*linecount);
  84.             s.erase (0, 2);
  85.             chomp (&s);
  86.             split_t tList (split(s, " "));
  87.             if (tList.size() != 2)
  88.             {
  89.                 throw SdpExceptions (PARAM_NUMERR);
  90.             }
  91.             else
  92.             {
  93.                 startTime = tList[0];
  94.                 stopTime = tList[1];
  95.             }
  96.         }
  97.         else if ((*linecount)[0] == 'r')
  98.         {
  99.             string s = (*linecount);
  100.             s.erase (0, 2);
  101.             chomp (&s);
  102.             split_t rList (split(s, " "));
  103.             if (rList.size() < 2)
  104.             {
  105.                 throw SdpExceptions (PARAM_NUMERR);
  106.             }
  107.             else
  108.             {
  109.                 SdpTimeRepeat stp;
  110.                 split_t::iterator iter;
  111.                 iter = rList.begin();
  112.                 stp.setInterval((*iter));
  113.                 ++iter;
  114.                 stp.setActiveDuration((*iter));
  115.                 ++iter;
  116.                 while (iter != rList.end())   // at least one offset
  117.                 {
  118.                     // Push the offset on to the offsetList
  119.                     stp.addOffset((*iter));
  120.                     ++iter;
  121.                 }
  122.                 repeatList.push_back(stp);
  123.             }
  124.         }
  125.         ++linecount;
  126.     }
  127. }    // SdpTime::SdpTime
  128. ///
  129. void
  130. SdpTime::encode (ostrstream& s)
  131. {
  132.     s << "t=" << startTime << ' ' << stopTime << "rn";
  133.     vector < SdpTimeRepeat > ::iterator repeatIter;
  134.     repeatIter = repeatList.begin();
  135.     while (repeatIter != repeatList.end())
  136.     {
  137.         s << "r=" << (*repeatIter).getInterval() << ' '
  138.         << (*repeatIter).getActiveDuration() ;
  139.         if (0 == (*repeatIter).getOffsetListSize())
  140.         {
  141.             s << "rn";
  142.         }
  143.         else
  144.         {
  145.             vector < string > offsetList;
  146.             offsetList = (*repeatIter).getOffsetList();
  147.             vector < string > ::iterator offsetIter;
  148.             offsetIter = offsetList.begin();
  149.             while (offsetIter != offsetList.end())
  150.             {
  151.                 s << ' ' << *offsetIter ;
  152.                 ++offsetIter;
  153.             }
  154.             s << "rn";
  155.         }
  156.         ++repeatIter;
  157.     }
  158. }    // SdpTime::encode
  159. SdpTimeRepeat::SdpTimeRepeat()
  160. {
  161.     interval = "";
  162.     activeDuration = "";
  163. }