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

📄 multiframedrtpsource.hh

📁 流媒体传输协议的实现代码,非常有用.可以支持rtsp mms等流媒体传输协议
💻 HH
字号:
/**********This library is free software; you can redistribute it and/or modify it underthe terms of the GNU Lesser General Public License as published by theFree Software Foundation; either version 2.1 of the License, or (at youroption) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)This library is distributed in the hope that it will be useful, but WITHOUTANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License formore details.You should have received a copy of the GNU Lesser General Public Licensealong with this library; if not, write to the Free Software Foundation, Inc.,59 Temple Place, Suite 330, Boston, MA  02111-1307  USA**********/// "liveMedia"// Copyright (c) 1996-2004 Live Networks, Inc.  All rights reserved.// RTP source for a common kind of payload format: Those which pack multiple,// complete codec frames (as many as possible) into each RTP packet.// C++ header#ifndef _MULTI_FRAMED_RTP_SOURCE_HH#define _MULTI_FRAMED_RTP_SOURCE_HH#ifndef _RTP_SOURCE_HH#include "RTPSource.hh"#endifclass BufferedPacket; // forwardclass BufferedPacketFactory; // forwardclass MultiFramedRTPSource: public RTPSource {protected:  MultiFramedRTPSource(UsageEnvironment& env, Groupsock* RTPgs,		       unsigned char rtpPayloadFormat,		       unsigned rtpTimestampFrequency,		       BufferedPacketFactory* packetFactory = NULL);      // virtual base class  virtual ~MultiFramedRTPSource();  virtual Boolean processSpecialHeader(BufferedPacket* packet,				       unsigned& resultSpecialHeaderSize);      // Subclasses redefine this to handle any special, payload format      // specific header that follows the RTP header.  virtual Boolean packetIsUsableInJitterCalculation(unsigned char* packet,						    unsigned packetSize);      // The default implementation returns True, but this can be redefinedprotected:  Boolean fCurrentPacketBeginsFrame;  Boolean fCurrentPacketCompletesFrame;protected:  // redefined virtual functions:  virtual void doStopGettingFrames();private:  // redefined virtual functions:  virtual void doGetNextFrame();  virtual void setPacketReorderingThresholdTime(unsigned uSeconds);private:  void doGetNextFrame1();  static void networkReadHandler(MultiFramedRTPSource* source, int /*mask*/);  friend void networkReadHandler(MultiFramedRTPSource*, int);  Boolean fAreDoingNetworkReads;  Boolean fNeedDelivery;  Boolean fPacketLossInFragmentedFrame;  unsigned char* fSavedTo;  unsigned fSavedMaxSize;  // A buffer to (optionally) hold incoming pkts that have been reorderered  class ReorderingPacketBuffer* fReorderingBuffer;};// A 'packet data' class that's used to implement the above.// Note that this can be subclassed - if desired - to redefine// "nextEnclosedFrameSize()".class BufferedPacket {public:  BufferedPacket();  virtual ~BufferedPacket();  Boolean hasUsableData() const { return fTail > fHead; }  unsigned useCount() const { return fUseCount; }  Boolean fillInData(RTPInterface& rtpInterface);  void assignMiscParams(unsigned short rtpSeqNo, unsigned rtpTimestamp,			struct timeval presentationTime,			Boolean hasBeenSyncedUsingRTCP, 			Boolean rtpMarkerBit, struct timeval timeReceived);  void skip(unsigned numBytes); // used to skip over an initial header  void removePadding(unsigned numBytes); // used to remove trailing bytes  void appendData(unsigned char* newData, unsigned numBytes);  void use(unsigned char* to, unsigned toSize,	   unsigned& bytesUsed, unsigned& bytesTruncated,	   unsigned short& rtpSeqNo, unsigned& rtpTimestamp,	   struct timeval& presentationTime,	   Boolean& hasBeenSyncedUsingRTCP, Boolean& rtpMarkerBit);  BufferedPacket*& nextPacket() { return fNextPacket; }  unsigned short rtpSeqNo() const { return fRTPSeqNo; }  struct timeval const& timeReceived() const { return fTimeReceived; }  unsigned char* data() const { return &fBuf[fHead]; }  unsigned dataSize() const { return fTail-fHead; }  Boolean rtpMarkerBit() const { return fRTPMarkerBit; }protected:  virtual void reset();  virtual unsigned nextEnclosedFrameSize(unsigned char*& framePtr,					 unsigned dataSize);      // The above function has been deprecated.  Instead, new subclasses should use:  virtual void getNextEnclosedFrameParameters(unsigned char*& framePtr,					      unsigned dataSize,					      unsigned& frameSize,					      unsigned& frameDurationInMicroseconds);  unsigned fPacketSize;  unsigned char* fBuf;  unsigned fHead;  unsigned fTail;private:  BufferedPacket* fNextPacket; // used to link together packets  unsigned fUseCount;  unsigned short fRTPSeqNo;  unsigned fRTPTimestamp;  struct timeval fPresentationTime; // corresponding to "fRTPTimestamp"  Boolean fHasBeenSyncedUsingRTCP;  Boolean fRTPMarkerBit;  struct timeval fTimeReceived;};// A 'factory' class for creating "BufferedPacket" objects.// If you want to subclass "BufferedPacket", then you'll also// want to subclass this, to redefine createNewPacket()class BufferedPacketFactory {public:  BufferedPacketFactory();  virtual ~BufferedPacketFactory();  virtual BufferedPacket* createNewPacket(MultiFramedRTPSource* ourSource);};#endif

⌨️ 快捷键说明

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