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

📄 h263plusvideostreamparser.hh

📁 H.264 RTSP 串流(live 555)視窗版本
💻 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.,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA**********/// "liveMedia"// Copyright (c) 1996-2010 Live Networks, Inc.  All rights reserved.// A filter that breaks up an H263 video stream into frames.// derived from MPEG4IP h263.c// Author Benhard Feiten#ifndef _H263PLUS_VIDEO_STREAM_PARSER_HH#define _H263PLUS_VIDEO_STREAM_PARSER_HH#ifndef _STREAM_PARSER_HH#include "StreamParser.hh"#endif// Default timescale for H.263 (1000ms)#define H263_TIMESCALE 1000// Default H263 frame rate (30fps)#define H263_BASIC_FRAME_RATE 30// Minimum number of bytes needed to parse an H263 header#define H263_REQUIRE_HEADER_SIZE_BYTES 5// Number of bytes the start code requries#define H263_STARTCODE_SIZE_BYTES 3// This is the input buffer's size. It should contain// 1 frame with the following start code#define H263_BUFFER_SIZE 256 * 1024//  additionalBytesNeeded - indicates how many additional bytes are to be read//  from the next frame's header (over the 3 bytes that are already read).#define ADDITIONAL_BYTES_NEEDED H263_REQUIRE_HEADER_SIZE_BYTES - H263_STARTCODE_SIZE_BYTES// The default max different (in %) betwqeen max and average bitrates#define H263_DEFAULT_CBR_TOLERANCE  10// The following structure holds information extracted from each frame's header:typedef struct _H263INFO {  u_int8_t  tr;                 // Temporal Reference, used in duration calculation  u_int16_t width;              // Width of the picture  u_int16_t height;             // Height of the picture  bool      isSyncFrame;        // Frame type (true = I frame = "sync" frame)} H263INFO;typedef struct _MaxBitrate_CTX {  u_int32_t  bitrateTable[H263_BASIC_FRAME_RATE];// Window of 1 second  u_int32_t  windowBitrate;              // The bitrate of the current window  u_int32_t  maxBitrate;                 // The up-to-date maximum bitrate  u_int32_t  tableIndex;                 // The next TR unit to update} MaxBitrate_CTX;class H263plusVideoStreamParser : public StreamParser {public:   H263plusVideoStreamParser( class H263plusVideoStreamFramer* usingSource,			                  FramedSource* inputSource);   virtual ~H263plusVideoStreamParser();   void registerReadInterest(unsigned char* to, unsigned maxSize);   unsigned parse(u_int64_t & currentDuration);    // returns the size of the frame  that was acquired, or 0 if none   unsigned numTruncatedBytes() const { return fNumTruncatedBytes; }  // The number of truncated bytes (if any)protected://  H263plusVideoStreamFramer* usingSource() {//    return (H263plusVideoStreamFramer*)fUsingSource;//  }  void setParseState();//   void setParseState(H263plusParseState parseState);private:   int       parseH263Frame( );   bool      ParseShortHeader(u_int8_t *headerBuffer, H263INFO *outputInfoStruct);   void      GetMaxBitrate( MaxBitrate_CTX *ctx, u_int32_t frameSize, u_int8_t frameTRDiff);   u_int64_t CalculateDuration(u_int8_t trDiff);   bool      GetWidthAndHeight( u_int8_t  fmt, u_int16_t *width, u_int16_t *height);   u_int8_t  GetTRDifference( u_int8_t nextTR, u_int8_t currentTR);  virtual void restoreSavedParserState();protected:   class H263plusVideoStreamFramer* fUsingSource;   unsigned char* fTo;   unsigned       fMaxSize;   unsigned char* fStartOfFrame;   unsigned char* fSavedTo;   unsigned char* fLimit;   unsigned       fNumTruncatedBytes;   unsigned       fSavedNumTruncatedBytes;private:   H263INFO       fNextInfo;       // Holds information about the next frame   H263INFO       fCurrentInfo;    // Holds information about the current frame   MaxBitrate_CTX fMaxBitrateCtx;  // Context for the GetMaxBitrate function   char           fStates[3][256];   u_int8_t       fNextHeader[H263_REQUIRE_HEADER_SIZE_BYTES];  u_int32_t fnextTR;   // The next frame's presentation time in TR units  u_int64_t fcurrentPT;   // The current frame's presentation time in milli-seconds};#endif

⌨️ 快捷键说明

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