bufferedPercent是如何工作的

how does bufferedPercent work

本文关键字:工作 何工作 bufferedPercent      更新时间:2023-10-16

2个问题:

1-我试图理解基于速率的自适应逻辑代码(完整的cpp代码在底部),但我不太理解getBufferedPercent函数返回了什么。

2-有没有地方可以找到关于这类功能的适当文档?

这里是RateBasedAdaptationLogic.cpp代码:

    #ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "RateBasedAdaptationLogic.h"
using namespace dash::logic;
using namespace dash::xml;
using namespace dash::http;
using namespace dash::mpd;
RateBasedAdaptationLogic::RateBasedAdaptationLogic  (IMPDManager *mpdManager, stream_t *stream) :
                          AbstractAdaptationLogic   (mpdManager, stream),
                          mpdManager                (mpdManager),
                          count                     (0),
                          currentPeriod             (mpdManager->getFirstPeriod()),
                          width                     (0),
                          height                    (0)
{
    this->width  = var_InheritInteger(stream, "dash-prefwidth");
    this->height = var_InheritInteger(stream, "dash-prefheight");
}
Chunk*  RateBasedAdaptationLogic::getNextChunk()
{
    if(this->mpdManager == NULL)
        return NULL;
    if(this->currentPeriod == NULL)
        return NULL;
    uint64_t bitrate = this->getBpsAvg();
    if(this->getBufferPercent() < MINBUFFER)
        bitrate = 0;
    Representation *rep = this->mpdManager->getRepresentation(this->currentPeriod, bitrate, this->width, this->height);
    if ( rep == NULL )
        return NULL;
    std::vector<Segment *> segments = this->mpdManager->getSegments(rep);
    if ( this->count == segments.size() )
    {
        this->currentPeriod = this->mpdManager->getNextPeriod(this->currentPeriod);
        this->count = 0;
        return this->getNextChunk();
    }
    if ( segments.size() > this->count )
    {
        Segment *seg = segments.at( this->count );
        Chunk *chunk = seg->toChunk();
        //In case of UrlTemplate, we must stay on the same segment.
        if ( seg->isSingleShot() == true )
            this->count++;
        seg->done();
        chunk->setCalculatedBW(this->getBpsAvg());
        return chunk;
    }
    return NULL;
}
const Representation *RateBasedAdaptationLogic::getCurrentRepresentation() const
{
    return this->mpdManager->getRepresentation( this->currentPeriod, this->getBpsAvg() );
}

您的问题是关于videolan项目的代码。你粘贴的代码在videolan网络服务器上。

videolan开发者页面上说他们有一个IRC频道(irc://irc.videolan.org/videolan)以及邮件列表,您可以在其中提问。

我建议您更多地阅读DASH stream_filter模块中的代码,尤其是缓冲区目录(它计算您询问的缓冲百分比),然后在IRC或邮件列表中询问特定问题。

不幸的是,这段代码似乎没有注释或文档。如果正常渠道没有帮助,你可以问作者。他们很友善,在文件顶部的版权声明中包含了电子邮件地址。