rtp.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:2k
源码类别:

midi

开发平台:

Unix_Linux

  1. /**
  2.  * @file rtp.h
  3.  * @brief RTP demux module shared declarations
  4.  */
  5. /*****************************************************************************
  6.  * Copyright © 2008 Rémi Denis-Courmont
  7.  *
  8.  * This library is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU General Public License
  10.  * as published by the Free Software Foundation; either version 2.0
  11.  * of the License, or (at your option) any later version.
  12.  *
  13.  * This library is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Lesser General Public
  19.  * License along with this library; if not, write to the Free Software
  20.  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  21.  ****************************************************************************/
  22. typedef struct rtp_pt_t rtp_pt_t;
  23. typedef struct rtp_session_t rtp_session_t;
  24. /** @section RTP payload format */
  25. struct rtp_pt_t
  26. {
  27.     void   *(*init) (demux_t *);
  28.     void    (*destroy) (demux_t *, void *);
  29.     void    (*decode) (demux_t *, void *, block_t *);
  30.     uint32_t  frequency; /* RTP clock rate (Hz) */
  31.     uint8_t   number;
  32. };
  33. int rtp_autodetect (demux_t *, rtp_session_t *, const block_t *);
  34. static inline uint8_t rtp_ptype (const block_t *block)
  35. {
  36.     return block->p_buffer[1] & 0x7F;
  37. }
  38. /** @section RTP session */
  39. rtp_session_t *rtp_session_create (demux_t *);
  40. void rtp_session_destroy (demux_t *, rtp_session_t *);
  41. void rtp_queue (demux_t *, rtp_session_t *, block_t *);
  42. bool rtp_dequeue (demux_t *, const rtp_session_t *, mtime_t *);
  43. int rtp_add_type (demux_t *demux, rtp_session_t *ses, const rtp_pt_t *pt);
  44. int rtp_process (demux_t *demux);
  45. void *rtp_thread (void *data);
  46. /* Global data */
  47. struct demux_sys_t
  48. {
  49.     rtp_session_t *session;
  50.     struct srtp_session_t *srtp;
  51.     int           fd;
  52.     int           rtcp_fd;
  53.     vlc_thread_t  thread;
  54.     vlc_mutex_t   lock;
  55.     vlc_cond_t    wait;
  56.     bool thread_ready;
  57.     unsigned      caching;
  58.     unsigned      timeout;
  59.     uint16_t      max_dropout; /**< Max packet forward misordering */
  60.     uint16_t      max_misorder; /**< Max packet backward misordering */
  61.     uint8_t       max_src; /**< Max simultaneous RTP sources */
  62.     bool          framed_rtp; /**< Framed RTP packets over TCP */
  63.     bool          dead; /**< End of stream */
  64. };