From 9e5babf9db52e64bdae60137be7696e56241fca6 Mon Sep 17 00:00:00 2001
From: xingzilong <xingzilong@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期五, 18 八月 2017 18:12:17 +0800
Subject: [PATCH] H264 NALU解析  并在RTSPServer判断

---
 VisitFace/RtspNativeCodec/app/libs/live555/include/liveMedia/QuickTimeFileSink.hh |  192 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 192 insertions(+), 0 deletions(-)

diff --git a/VisitFace/RtspNativeCodec/app/libs/live555/include/liveMedia/QuickTimeFileSink.hh b/VisitFace/RtspNativeCodec/app/libs/live555/include/liveMedia/QuickTimeFileSink.hh
new file mode 100644
index 0000000..8e920f4
--- /dev/null
+++ b/VisitFace/RtspNativeCodec/app/libs/live555/include/liveMedia/QuickTimeFileSink.hh
@@ -0,0 +1,192 @@
+/**********
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along 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-2017 Live Networks, Inc.  All rights reserved.
+// A sink that generates a QuickTime file from a composite media session
+// C++ header
+
+#ifndef _QUICKTIME_FILE_SINK_HH
+#define _QUICKTIME_FILE_SINK_HH
+
+#ifndef _MEDIA_SESSION_HH
+#include "MediaSession.hh"
+#endif
+
+class QuickTimeFileSink: public Medium {
+public:
+  static QuickTimeFileSink* createNew(UsageEnvironment& env,
+				      MediaSession& inputSession,
+				      char const* outputFileName,
+				      unsigned bufferSize = 20000,
+				      unsigned short movieWidth = 240,
+				      unsigned short movieHeight = 180,
+				      unsigned movieFPS = 15,
+				      Boolean packetLossCompensate = False,
+				      Boolean syncStreams = False,
+				      Boolean generateHintTracks = False,
+				      Boolean generateMP4Format = False);
+
+  typedef void (afterPlayingFunc)(void* clientData);
+  Boolean startPlaying(afterPlayingFunc* afterFunc,
+                       void* afterClientData);
+
+  unsigned numActiveSubsessions() const { return fNumSubsessions; }
+
+protected:
+  QuickTimeFileSink(UsageEnvironment& env, MediaSession& inputSession,
+		    char const* outputFileName, unsigned bufferSize,
+		    unsigned short movieWidth, unsigned short movieHeight,
+		    unsigned movieFPS, Boolean packetLossCompensate,
+		    Boolean syncStreams, Boolean generateHintTracks,
+		    Boolean generateMP4Format);
+      // called only by createNew()
+  virtual ~QuickTimeFileSink();
+
+  virtual void noteRecordedFrame(MediaSubsession& inputSubsession,
+				 unsigned packetDataSize, struct timeval const& presentationTime);
+
+private:
+  Boolean continuePlaying();
+  static void afterGettingFrame(void* clientData, unsigned frameSize,
+				unsigned numTruncatedBytes,
+				struct timeval presentationTime,
+				unsigned durationInMicroseconds);
+  static void onSourceClosure(void* clientData);
+  void onSourceClosure1();
+  static void onRTCPBye(void* clientData);
+  void completeOutputFile();
+
+private:
+  friend class SubsessionIOState;
+  MediaSession& fInputSession;
+  FILE* fOutFid;
+  unsigned fBufferSize;
+  Boolean fPacketLossCompensate;
+  Boolean fSyncStreams, fGenerateMP4Format;
+  struct timeval fNewestSyncTime, fFirstDataTime;
+  Boolean fAreCurrentlyBeingPlayed;
+  afterPlayingFunc* fAfterFunc;
+  void* fAfterClientData;
+  unsigned fAppleCreationTime;
+  unsigned fLargestRTPtimestampFrequency;
+  unsigned fNumSubsessions, fNumSyncedSubsessions;
+  struct timeval fStartTime;
+  Boolean fHaveCompletedOutputFile;
+
+private:
+  ///// Definitions specific to the QuickTime file format:
+
+  unsigned addWord64(u_int64_t word);
+  unsigned addWord(unsigned word);
+  unsigned addHalfWord(unsigned short halfWord);
+  unsigned addByte(unsigned char byte) {
+    putc(byte, fOutFid);
+    return 1;
+  }
+  unsigned addZeroWords(unsigned numWords);
+  unsigned add4ByteString(char const* str);
+  unsigned addArbitraryString(char const* str,
+			      Boolean oneByteLength = True);
+  unsigned addAtomHeader(char const* atomName);
+  unsigned addAtomHeader64(char const* atomName);
+      // strlen(atomName) must be 4
+  void setWord(int64_t filePosn, unsigned size);
+  void setWord64(int64_t filePosn, u_int64_t size);
+
+  unsigned movieTimeScale() const {return fLargestRTPtimestampFrequency;}
+
+  // Define member functions for outputting various types of atom:
+#define _atom(name) unsigned addAtom_##name()
+  _atom(ftyp); // for MP4 format files
+  _atom(moov);
+      _atom(mvhd);
+  _atom(iods); // for MP4 format files
+      _atom(trak);
+          _atom(tkhd);
+          _atom(edts);
+              _atom(elst);
+          _atom(tref);
+              _atom(hint);
+          _atom(mdia);
+              _atom(mdhd);
+              _atom(hdlr);
+              _atom(minf);
+                  _atom(smhd);
+                  _atom(vmhd);
+                  _atom(gmhd);
+                      _atom(gmin);
+                  unsigned addAtom_hdlr2();
+                  _atom(dinf);
+                      _atom(dref);
+                          _atom(alis);
+                  _atom(stbl);
+                      _atom(stsd);
+                          unsigned addAtom_genericMedia();
+                          unsigned addAtom_soundMediaGeneral();
+                          _atom(ulaw);
+                          _atom(alaw);
+                          _atom(Qclp);
+                              _atom(wave);
+                                  _atom(frma);
+                                  _atom(Fclp);
+                                  _atom(Hclp);
+                          _atom(mp4a);
+//                            _atom(wave);
+//                                _atom(frma);
+                                  _atom(esds);
+                                  _atom(srcq);
+                          _atom(h263);
+                          _atom(avc1);
+                              _atom(avcC);
+                          _atom(mp4v);
+                          _atom(rtp);
+                              _atom(tims);
+                      _atom(stts);
+                      _atom(stss);
+                      _atom(stsc);
+                      _atom(stsz);
+                      _atom(co64);
+          _atom(udta);
+              _atom(name);
+              _atom(hnti);
+                  _atom(sdp);
+              _atom(hinf);
+                  _atom(totl);
+                  _atom(npck);
+                  _atom(tpay);
+                  _atom(trpy);
+                  _atom(nump);
+                  _atom(tpyl);
+                  _atom(dmed);
+                  _atom(dimm);
+                  _atom(drep);
+                  _atom(tmin);
+                  _atom(tmax);
+                  _atom(pmax);
+                  _atom(dmax);
+                  _atom(payt);
+  unsigned addAtom_dummy();
+
+private:
+  unsigned short fMovieWidth, fMovieHeight;
+  unsigned fMovieFPS;
+  int64_t fMDATposition;
+  int64_t fMVHD_durationPosn;
+  unsigned fMaxTrackDurationM; // in movie time units
+  class SubsessionIOState* fCurrentIOState;
+};
+
+#endif

--
Gitblit v1.8.0