rmalvtxt.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:11k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * 
  3.  *  $Id: rmalvtxt.h,v 1.1 2003/05/30 02:17:36 gabest Exp $
  4.  *
  5.  *  Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
  6.  *
  7.  *  http://www.real.com/devzone
  8.  *
  9.  *  This program contains proprietary 
  10.  *  information of Progressive Networks, Inc, and is licensed
  11.  *  subject to restrictions on use and distribution.
  12.  *
  13.  *
  14.  *  RealText encoder class using the SuperEncoder library.
  15.  *
  16.  */
  17. #ifndef _RMALVTXT_H_
  18. #define _RMALVTXT_H_
  19. /* These need to be visible to rtlive and to exlvtext: */
  20. /* For live, duration is max allowed val, or max ulong:
  21.  */
  22. #if !defined(MAX_ULONG32)
  23. # define MAX_ULONG32     0xFFFFFFFF
  24. #endif
  25. #if !defined(MIN_LONG32)
  26. # define MIN_LONG32                 0xFFFFFFFF
  27. #endif
  28. /* These, too, need to be visible to rtlive and to exlvtext: */
  29. #define MAX_PACKET_SIZE     500
  30. #define USE_DEFAULT_TYPE     NULL
  31. #define USE_DEFAULT_HEIGHT          MAX_ULONG32
  32. #define USE_DEFAULT_WIDTH     MAX_ULONG32
  33. #define USE_DEFAULT_SCROLLRATE     MIN_LONG32
  34. #define USE_DEFAULT_CRAWLRATE     MIN_LONG32
  35. #define USE_DEFAULT_BGCOLOR     NULL
  36. #define USE_DEFAULT_LINKCOLOR     NULL
  37. #define USE_DEFAULT_LINKUNDERLINING 0x2
  38. #define USE_DEFAULT_WORDWRAP     0x2
  39. #define USE_DEFAULT_DOLOOPING     0L     
  40. #define USE_DEFAULT_IGNOREEXTRASPACES FALSE
  41. typedef _INTERFACE IUnknown IUnknown;
  42. typedef _INTERFACE IRMAValues IRMAValues;
  43. typedef _INTERFACE IRMAPacket IRMAPacket;
  44. typedef _INTERFACE IRMALiveText IRMALiveText;
  45. typedef _INTERFACE IRMALiveText2 IRMALiveText2;
  46. STDAPI
  47. CreateLiveText(IRMALiveText**);
  48. typedef PN_RESULT (PNEXPORT_PTR FPRMCREATELIVETEXT)(IRMALiveText** ppLiveText);
  49. DEFINE_GUID(IID_IRMALiveText,  0x00001b00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  50. #undef INTERFACE
  51. #define INTERFACE IRMALiveText
  52. DECLARE_INTERFACE_(IRMALiveText, IUnknown)
  53. {
  54.     /***********************************************************************/
  55.     /*
  56.      * IUnknown methods
  57.      */
  58.     STDMETHOD(QueryInterface) (THIS_
  59.  REFIID riid,
  60.  void** ppvObj) PURE;
  61.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  62.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  63.     /***********************************************************************/
  64.     /*
  65.      * IRMALiveText methods
  66.      */
  67.     /*
  68.      * InitLiveText() must be called before any of the other IRMALiveText
  69.      * methods:
  70.      */
  71.     STDMETHOD(InitLiveText) (THIS_
  72. /*
  73.  * This is the computer where the
  74.  * RMServer is running:
  75.  */
  76. char* pAddress,
  77. /*
  78.  * This is the port number defined in
  79.  * the config file where the FSMount
  80.  * option has the following entry:
  81.  * { /encoder/, pn-encoder, Port=#### }
  82.  * where #### is the port number that
  83.  * encoders will use:
  84.  */
  85. UINT16 port,
  86. char* pUsername,
  87. char* pPassword,
  88. /*
  89.  * This is the "file" name that
  90.  * RMPlayers can use to view the
  91.  * stream.  For example, if your
  92.  * server was called "srv1" and the
  93.  * rtsp port in the config file was
  94.  * 8080, and the filename from the
  95.  * encoder was "foo.rtx", then a
  96.  * player could view the stream by
  97.  * opening the following location:
  98.  * "rtsp://srv1:8080/encoder/foo.rtx"
  99.  */
  100. char* pFilename) PURE;
  101.     /* ******************************************************************* */
  102.     /* The following methods are to be called prior to sending any data
  103.      * and exist as overrides to the default attributes of a RealText
  104.      * presentation.  Please see the section on the <WINDOW> header tag
  105.      * in the realtext.htm in the SDK's doc directory for more information.
  106.      * Note: with live text, you do not need a <WINDOW> tag; you must use
  107.      * the following methods to set the stream type (e.g., "tickertape"),
  108.      * window width, height, background color, ...etc.
  109.      */
  110.     
  111.     STDMETHOD(SetType) (THIS_
  112. char* szType) PURE;
  113.     STDMETHOD(SetWindowDimensions) (THIS_
  114. ULONG32 width,
  115. ULONG32 height) PURE;
  116.     STDMETHOD(SetTextMotion) (THIS_
  117. LONG32 scrollrate,
  118. LONG32 crawlrate) PURE;
  119.     STDMETHOD(SetBackgroundColor) (THIS_
  120. char* szBackgroundColor) PURE;
  121.     STDMETHOD(SetHyperlinkInfo) (THIS_
  122. BOOL underlineHyperlinks,
  123. char* szLinkColor) PURE;
  124.     STDMETHOD(UseWordwrap) (THIS_
  125. BOOL useWordwrap) PURE;
  126.     /*
  127.      * This is for "TickerTape"-type windows only; it is ignored by all
  128.      * other types:
  129.      */
  130.     STDMETHOD(SetDoLooping) (THIS_
  131. BOOL bDoLooping) PURE;
  132.     /* ******************************************************************* */
  133.     /*
  134.      * AddData() lets you add text to the stream.  The second
  135.      * parameter, bSendImmediately, can be used to force the encoder to
  136.      * send all text that's been added (and not yet sent) immediately.
  137.      * Note: if bSendImmediately is FALSE, the encoder will decide when
  138.      * to send the text it has buffered based on the length of the text in
  139.      * the buffer and the time since the last packet was sent:
  140.      */
  141.     STDMETHOD(AddData) (THIS_
  142. char* szMoreData,
  143. BOOL bSendImmediately) PURE;
  144.     /*
  145.      * AddTickerItem() lets you add "tickertape" text to the stream.
  146.      * This method prepends "<TU>" to szTickerUpperData, and
  147.      * "<TL>" to szTickerLowerData.  Calling:
  148.      * AddTickerItem("ABCD", "5 1/2", TRUE)
  149.      * is the same as calling
  150.      * AddData("<TU>ABCD", FALSE);
  151.      * AddData("<TL>5 1/2", TRUE);
  152.      * except that the former guarantees that the "upper" and "lower"
  153.      * items will be sent in the same packet. 
  154.      * (Please see the comments above for AddData() for details on use of
  155.      * the second parameter, bSendImmediately.
  156.      */
  157.     STDMETHOD(AddTickerItem) (THIS_
  158. char* szTickerUpperData,
  159. char* szTickerLowerData,
  160. BOOL bSendImmediately) PURE;
  161.     /* ******************************************************************* */
  162.     /*
  163.      * flush() tells the encoder to send everything that's in the buffer and
  164.      * clear it:
  165.      */
  166.     STDMETHOD(flush) (THIS) PURE;
  167.     /* ******************************************************************* */
  168.     /*
  169.      * GetTime returns the current system time in milliseconds.  The return
  170.      * value is a UINT32 (32-bit unsigned int):
  171.      */
  172.     STDMETHOD_(UINT32,GetTime)     (THIS) PURE;
  173.     /* ******************************************************************* */
  174.     /*
  175.      * This must be called on a regular basis: 
  176.      */
  177.     STDMETHOD(Process)     (THIS) PURE;
  178.     /* ******************************************************************* */
  179.     /*
  180.      * These methods keep track of the encoder's state and must be called
  181.      * as they are in main.cpp in the exlvtext directory:
  182.      */
  183.     STDMETHOD_(BOOL,EncoderIsInitialized)   (THIS) PURE;
  184.     STDMETHOD_(BOOL,PacketsHaveStarted)     (THIS) PURE;
  185.     STDMETHOD_(BOOL,EncoderIsDone)     (THIS) PURE;
  186.     STDMETHOD(SetEncoderDone)     (THIS) PURE;
  187. };
  188. DEFINE_GUID(IID_IRMALiveText2,  0x00001b01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  189. #undef INTERFACE
  190. #define INTERFACE IRMALiveText2
  191. DECLARE_INTERFACE_(IRMALiveText2, IUnknown)
  192. {
  193.     /***********************************************************************/
  194.     /*
  195.      * IUnknown methods
  196.      */
  197.     STDMETHOD(QueryInterface) (THIS_
  198.  REFIID riid,
  199.  void** ppvObj) PURE;
  200.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  201.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  202.     /***********************************************************************/
  203.     /*
  204.      * IRMALiveText2 methods
  205.      */
  206.     /* ******************************************************************* */
  207.     /* The following methods are to be called prior to sending any data
  208.      * and exist as overrides to the default attributes of a RealText
  209.      * presentation.  Please see the section on the <window> header tag
  210.      * in the realtext.htm in the SDK's doc directory for more information.
  211.      * Note: these are additional to the IRMALiveText methods, listed
  212.      * above.
  213.      */
  214.     
  215.     /* This allows you to give an estimate of the bit rate needed by a live
  216.      * text stream so that the server can determine whether or not a player
  217.      * can view the stream based on its available bandwidth  This method
  218.      * should be called before sending any data::
  219.      */
  220.     STDMETHOD(DeclareAverageBitrate) (THIS_
  221. ULONG32 ulAvgBitsPerSecond) PURE;
  222.     /* As above, for DeclareAverageBitrate, this method should be called
  223.      * before sending any data::
  224.      */
  225.     STDMETHOD(DeclareMaximumBitrate) (THIS_
  226. ULONG32 ulMaxBitsPerSecond) PURE;
  227.     /*This determines how multiple contiguous space characters are presented;
  228.      * Defaults to FALSE which means that multiple spaces in non-tag text
  229.      * would all be renderered.  If this value is TRUE, multiple contiguous
  230.      * spaces will be treated as a single space.  This method should be
  231.      * called before sending any data.
  232.      */
  233.     STDMETHOD(IgnoreExtraSpaces) (THIS_
  234. BOOL bIgnoreExtraSpaces) PURE;
  235.     /* This is for internal testing use only and does not affect the
  236.      * presentation of a live text stream:
  237.      */
  238.     STDMETHOD(SetFlags) (THIS_
  239. ULONG32 ulFlags) PURE;
  240.     /* ******************************************************************* */
  241.     /* The following methods can be called at any time while the encoder is
  242.      * running.
  243.      */
  244.     /* This method tells you when the last-sent text will end.  This
  245.      * allows you to determine when it's ok to send more text.  For example,
  246.      * if you're streaming a presentation that's scrolling at a rate of 20
  247.      * pixels per second in a window that's 200 pixels high and you call
  248.      * IRMALiveText's AddData() with 100 lines of 20-point text, it will take
  249.      * 100 seconds for all that text to scroll up and out of the window.  The
  250.      * following method would return the current time plus 100 if you called
  251.      * it right after calling AddData():
  252.      */
  253.     STDMETHOD(GetLastSentTextEndTime) (THIS_
  254. ULONG32& ulLastEndTime) PURE;
  255.     /* This method allows you to adjust the time, since the last data was
  256.      * sent, that the encoder waits before resending "heartbeat" packets that
  257.      * let the server know the encoder still alive and to let newly-connected
  258.      * players know what's currently visible in the window (in case they
  259.      * connected during a "dry" period in the stream, after the last new
  260.      * text was sent).  Time is in milliseconds.  NOTE: this defaults to 
  261.      * 3000 milliseconds; any number higher than this will result in longer
  262.      * connect times for players coming in during a "dry" spell in the
  263.      * stream, and a sufficiently high value may cause the server to
  264.      * disconnect since it assumes the encoder has stopped if it does not
  265.      * periodically send data.  This value's minimum is 500 milliseconds.
  266.      */
  267.     STDMETHOD(SetTimeBetweenDryStreamResends) (THIS_
  268. ULONG32 ulMillisecBetweenResends) PURE;
  269. };
  270. #endif /* _RMALVTXT_H_ */