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