From 96d786678e1909c1f7d77a6f1d586d02a9881f6a Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 09 八月 2017 15:27:56 +0800
Subject: [PATCH] rtps server (not ok)

---
 RtspFace/FFmpegRTSPServer/H264FramedSource.h   |   52 +++++++++++++++++
 RtspFace/FFmpegRTSPServer/H264FramedSource.cpp |   78 ++++++++++++++++++++++++++
 2 files changed, 130 insertions(+), 0 deletions(-)

diff --git a/RtspFace/FFmpegRTSPServer/H264FramedSource.cpp b/RtspFace/FFmpegRTSPServer/H264FramedSource.cpp
new file mode 100644
index 0000000..26c62f2
--- /dev/null
+++ b/RtspFace/FFmpegRTSPServer/H264FramedSource.cpp
@@ -0,0 +1,78 @@
+//
+//  H264FramedSource.cpp
+//  FFmpegRTSPServer
+//
+//  Created by Mina Saad on 9/22/15.
+//  Copyright (c) 2015 Mina Saad. All rights reserved.
+//
+
+#include <sstream>
+#include "H264FramedSource.h"
+
+using namespace MESAI;
+
+H264FramedSource * H264FramedSource::createNew(UsageEnvironment& env, const FrameCallbacks& _cbs)
+{
+	return new H264FramedSource(env, _cbs);
+}
+
+H264FramedSource::H264FramedSource(UsageEnvironment& env, const FrameCallbacks& _cbs)
+		: FramedSource(env), spsBase64(), ppsBase64(), cbs(_cbs)
+{
+}
+
+H264FramedSource::~H264FramedSource()
+{
+
+}
+
+std::string H264FramedSource::getAuxLine() const
+{
+	std::ostringstream oss;
+	//a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AHpW4KA9oQAABwgAAV+QB,aO48gA==
+	oss << "a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=" << spsBase64 << "," << ppsBase64 << "\r\n";
+	return oss.str();
+}
+
+
+void H264FramedSource::doGetNextFrame()
+{
+	if (!isCurrentlyAwaitingData())
+		return; // we're not ready for the data yet
+
+	uint8_t* newFrameDataStart = nullptr;
+	size_t newFrameSize = 0;
+
+	if (cbs.deliverFrameCallback(cbs.args, newFrameDataStart, newFrameSize, fPresentationTime))
+	{
+		if (newFrameDataStart != NULL && newFrameSize > 0)
+		{
+			if (newFrameSize > fMaxSize)
+			{
+				fFrameSize = fMaxSize;
+				fNumTruncatedBytes = newFrameSize - fMaxSize;
+			}
+			else
+			{
+				fFrameSize = newFrameSize;
+			}
+
+			memcpy(fTo, newFrameDataStart, fFrameSize);
+		}
+		else
+		{
+			fFrameSize = 0;
+			fTo = NULL;
+			handleClosure(this);
+		}
+
+		cbs.releaseFrameCallback(cbs.args);
+	}
+	else
+	{
+		fFrameSize = 0;
+	}
+
+	if(fFrameSize > 0)
+		FramedSource::afterGetting(this);
+}
diff --git a/RtspFace/FFmpegRTSPServer/H264FramedSource.h b/RtspFace/FFmpegRTSPServer/H264FramedSource.h
new file mode 100644
index 0000000..8bde361
--- /dev/null
+++ b/RtspFace/FFmpegRTSPServer/H264FramedSource.h
@@ -0,0 +1,52 @@
+//
+//  H264FramedSource.h
+//  FFmpegRTSPServer
+//
+//  Created by Mina Saad on 9/22/15.
+//  Created by HOU Xiao on 8/7/17.
+//  Copyright (c) 2015 Mina Saad. All rights reserved.
+//
+
+#ifndef MESAI_H264FRAMEDSOURCE_HH
+#define MESAI_H264FRAMEDSOURCE_HH
+
+#include <functional>
+#include <liveMedia/FramedSource.hh>
+#include <UsageEnvironment/UsageEnvironment.hh>
+#include <groupsock/Groupsock.hh>
+
+namespace MESAI
+{
+
+class H264FramedSource : public FramedSource
+{
+public:
+	struct FrameCallbacks
+	{
+		void* args;
+
+		typedef bool(*deliver_frame_callback_t)(void* args, uint8_t*& buffer, size_t& buffSize, timeval& pts);
+		typedef void(*release_frame_callback_t)(void* args) ;
+
+		deliver_frame_callback_t deliverFrameCallback;
+		release_frame_callback_t releaseFrameCallback;
+	};
+
+public:
+	static H264FramedSource* createNew(UsageEnvironment& env, const FrameCallbacks& _cbs);
+	H264FramedSource(UsageEnvironment& env, const FrameCallbacks& _cbs);
+	~H264FramedSource();
+
+	virtual std::string getAuxLine() const;
+
+public:
+	std::string spsBase64;
+	std::string ppsBase64;
+
+private:
+	virtual void doGetNextFrame();
+	FrameCallbacks cbs;
+};
+
+}
+#endif

--
Gitblit v1.8.0