houxiao
2017-08-09 96d786678e1909c1f7d77a6f1d586d02a9881f6a
rtps server (not ok)

git-svn-id: http://192.168.1.226/svn/proxy@994 454eff88-639b-444f-9e54-f578c98de674
2个文件已添加
130 ■■■■■ 已修改文件
RtspFace/FFmpegRTSPServer/H264FramedSource.cpp 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RtspFace/FFmpegRTSPServer/H264FramedSource.h 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RtspFace/FFmpegRTSPServer/H264FramedSource.cpp
New file
@@ -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);
}
RtspFace/FFmpegRTSPServer/H264FramedSource.h
New file
@@ -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