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