⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 player_media.h

📁 网络MPEG4IP流媒体开发源代码
💻 H
字号:
/* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (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.mozilla.org/MPL/ *  * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. *  * The Original Code is MPEG4IP. *  * The Initial Developer of the Original Code is Cisco Systems Inc. * Portions created by Cisco Systems Inc. are * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved. *  * Contributor(s):  *              Bill May        wmay@cisco.com *//* * player_media.h - provides CPlayerMedia class, which defines the * interface to a particular media steam. */#ifndef __PLAYER_MEDIA_H__#define __PLAYER_MEDIA_H__ 1#include <SDL.h>#include <SDL_thread.h>#include <sdp/sdp.h>#include <rtsp/rtsp_client.h>#include <rtp/rtp.h>#include "our_bytestream.h"#include "our_msg_queue.h"#include "codec_plugin.h"class CPlayerSession;class CAudioSync;class CVideoSync;class C2ConsecIpPort;class COurInByteStream;class CRtpByteStreamBase;class CPlayerMedia { public:  CPlayerMedia(CPlayerSession *p);  ~CPlayerMedia();  /* API routine - create - for RTP stream */  int create_streaming(media_desc_t *sdp_media,		       char *errmsg,		       uint32_t errlen,		       int on_demand,		       int use_rtsp,		       int media_number_in_session);  /* API routine - create - where we provide the bytestream */  int create(COurInByteStream *b, 	     int is_video, 	     char *errmsg = NULL, 	     uint32_t errlen = 0, 	     int streaming = 0);  /* API routine - play, pause */  int do_play(double start_time_offset, char *errmsg, uint32_t errlen);  int do_pause(void);  int is_video(void) { return (m_is_video); };  double get_max_playtime(void);  /* API routine - interface for decoding start/continue */  void start_decoding(void);  void bytestream_primed(void);   /* API routine - ip port information */  uint16_t get_our_port (void) { return m_our_port; };  void set_server_port (uint16_t port) { m_server_port = port; };  uint16_t get_server_port (void) { return m_server_port; };  media_desc_t *get_sdp_media_desc (void) { return m_media_info; };  void set_source_addr (char *s)    {      if (m_source_addr != NULL) free(m_source_addr);      m_source_addr = s;    }  const char *get_source_addr(void);  CPlayerMedia *get_next (void) { return m_next; };  void set_next (CPlayerMedia *newone) { m_next = newone; };  int decode_thread(void);  /* Public RTP routines  - receive thread, callback, and routines to   * pass information from rtsp to rtp byte stream   */  int recv_thread(void);  void recv_callback(struct rtp *session, rtp_event *e);  void set_rtp_ssrc (uint32_t ssrc)    { m_rtp_ssrc = ssrc; m_rtp_ssrc_set = TRUE;};  void set_rtp_base_ts(uint32_t time);  void set_rtp_base_seq(uint16_t seq);    void set_video_sync(CVideoSync *p) {m_video_sync = p;};  void set_audio_sync(CAudioSync *p) {m_audio_sync = p;};  const video_info_t *get_video_info (void) { return m_video_info; };  const audio_info_t *get_audio_info (void) { return m_audio_info; };  int create_video_plugin(const codec_plugin_t *p,			  const char *compressor, 			  int profile, 			  int type, 			  format_list_t *sdp_media,			  video_info_t *video,			  const uint8_t *user_data,			  uint32_t userdata_size);  int create_audio_plugin(const codec_plugin_t *p,			  const char *compressor, 			  int profile, 			  int type, 			  format_list_t *sdp_media,			  audio_info_t *audio,			  const uint8_t *user_data,			  uint32_t userdata_size);  void set_plugin_data (const codec_plugin_t *p, 			codec_data_t *d, 			video_vft_t *v, 			audio_vft_t *a);  int get_plugin_status(char *buffer, uint32_t buflen);  void set_user_data (const uint8_t *udata, int length) {    m_user_data = udata;    m_user_data_size = length;  }  rtsp_session_t *get_rtsp_session(void) { return m_rtsp_session; };  void rtp_init_tcp(void);  void rtp_periodic(void);  void rtp_start(void);  void rtp_end(void);  int rtp_receive_packet(unsigned char interleaved, struct rtp_packet *, int len);  int rtcp_send_packet(uint8_t *buffer, int buflen);  int get_rtp_media_number (void) { return m_rtp_media_number_in_session; };  void syncronize_rtp_bytestreams(rtcp_sync_t *sync); private:  int create_common(int is_video, char *errmsg, uint32_t errlen);  void wait_on_bytestream(void);  int m_streaming;  int m_is_video;  int m_paused;  CPlayerMedia *m_next;  CPlayerSession *m_parent;  media_desc_t *m_media_info;  format_list_t *m_media_fmt;        // format currently running.  rtsp_session_t *m_rtsp_session;  C2ConsecIpPort *m_ports;  in_port_t m_our_port;  in_port_t m_server_port;  char *m_source_addr;  time_t m_start_time;  int m_stream_ondemand;  int m_sync_time_set;  uint64_t m_sync_time_offset;  uint32_t m_rtptime_tickpersec;  double m_play_start_time;  // Receive thread variables  SDL_Thread *m_recv_thread;  /*************************************************************************   * RTP variables - used to pass info to the bytestream   *************************************************************************/  int m_rtp_ondemand;  int m_rtp_use_rtsp;  int m_rtp_media_number_in_session;  int m_rtp_buffering;  struct rtp *m_rtp_session;  CRtpByteStreamBase *m_rtp_byte_stream;  CMsgQueue m_rtp_msg_queue;  rtp_packet *m_head, *m_tail;   uint32_t m_rtp_queue_len;    // from rtsp...  int m_rtp_ssrc_set;  uint32_t m_rtp_ssrc;  int m_rtsp_base_ts_received;  uint32_t m_rtp_base_ts;  int m_rtsp_base_seq_received;  uint16_t m_rtp_base_seq;  int determine_payload_type_from_rtp(void);  void create_rtp_byte_stream(uint8_t payload, uint64_t tps, format_list_t *fmt);  void clear_rtp_packets(void);  // from rtcp, for broadcast, in case we get an RTCP before we determine  // the payload type  uint32_t m_rtcp_ntp_frac;  uint32_t m_rtcp_ntp_sec;  uint32_t m_rtcp_rtp_ts;  int m_rtcp_received;  volatile int m_rtp_inited;  /*************************************************************************   * Decoder thread variables   *************************************************************************/  SDL_Thread *m_decode_thread;  volatile int m_decode_thread_waiting;  SDL_sem *m_decode_thread_sem;  const codec_plugin_t *m_plugin;  codec_data_t *m_plugin_data;    // State change variable  CMsgQueue m_decode_msg_queue;  // Private routines  int process_rtsp_transport(char *transport);  CAudioSync *m_audio_sync;  CVideoSync *m_video_sync;  void parse_decode_message(int &thread_stop, int &decoding);  COurInByteStream *m_byte_stream;  video_info_t *m_video_info;  audio_info_t *m_audio_info;  const uint8_t *m_user_data;  int m_user_data_size;};int process_rtsp_rtpinfo(char *rtpinfo, 			 CPlayerSession *session,			 CPlayerMedia *media);extern audio_vft_t audio_vft;extern video_vft_t video_vft;#ifdef _WIN32#include "player_util.h"DEFINE_MESSAGE_MACRO(media_message, "media")#else#define media_message(loglevel, fmt...) message(loglevel, "media", fmt)#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -