mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Fix #851, HTTP API support number of video frames for FPS. 2.0.240
This commit is contained in:
parent
4167715153
commit
ff87318b95
7 changed files with 45 additions and 1 deletions
|
@ -337,6 +337,7 @@ Remark:
|
||||||
|
|
||||||
## History
|
## History
|
||||||
|
|
||||||
|
* v2.0, 2017-04-23, Fix [#851][bug #851], HTTP API support number of video frames for FPS. 2.0.240
|
||||||
* <strong>v2.0, 2017-04-18, [2.0 release1(2.0.239)][r2.0r1] released. 86515 lines.</strong>
|
* <strong>v2.0, 2017-04-18, [2.0 release1(2.0.239)][r2.0r1] released. 86515 lines.</strong>
|
||||||
* v2.0, 2017-04-18, Fix [#848][bug #848], crash at HTTP fast buffer grow. 2.0.239
|
* v2.0, 2017-04-18, Fix [#848][bug #848], crash at HTTP fast buffer grow. 2.0.239
|
||||||
* v2.0, 2017-04-15, Fix [#844][bug #844], support Haivision encoder. 2.0.238
|
* v2.0, 2017-04-15, Fix [#844][bug #844], support Haivision encoder. 2.0.238
|
||||||
|
@ -1291,6 +1292,7 @@ Winlin
|
||||||
[bug #846]: https://github.com/ossrs/srs/issues/846
|
[bug #846]: https://github.com/ossrs/srs/issues/846
|
||||||
[bug #844]: https://github.com/ossrs/srs/issues/844
|
[bug #844]: https://github.com/ossrs/srs/issues/844
|
||||||
[bug #848]: https://github.com/ossrs/srs/issues/848
|
[bug #848]: https://github.com/ossrs/srs/issues/848
|
||||||
|
[bug #851]: https://github.com/ossrs/srs/issues/851
|
||||||
[bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx
|
[bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx
|
||||||
|
|
||||||
[exo #828]: https://github.com/google/ExoPlayer/pull/828
|
[exo #828]: https://github.com/google/ExoPlayer/pull/828
|
||||||
|
|
|
@ -257,6 +257,7 @@ SrsPublishRecvThread::SrsPublishRecvThread(
|
||||||
|
|
||||||
recv_error_code = ERROR_SUCCESS;
|
recv_error_code = ERROR_SUCCESS;
|
||||||
_nb_msgs = 0;
|
_nb_msgs = 0;
|
||||||
|
video_frames = 0;
|
||||||
error = st_cond_new();
|
error = st_cond_new();
|
||||||
ncid = cid = 0;
|
ncid = cid = 0;
|
||||||
|
|
||||||
|
@ -298,6 +299,11 @@ int64_t SrsPublishRecvThread::nb_msgs()
|
||||||
return _nb_msgs;
|
return _nb_msgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t SrsPublishRecvThread::nb_video_frames()
|
||||||
|
{
|
||||||
|
return video_frames;
|
||||||
|
}
|
||||||
|
|
||||||
int SrsPublishRecvThread::error_code()
|
int SrsPublishRecvThread::error_code()
|
||||||
{
|
{
|
||||||
return recv_error_code;
|
return recv_error_code;
|
||||||
|
@ -378,6 +384,10 @@ int SrsPublishRecvThread::handle(SrsCommonMessage* msg)
|
||||||
|
|
||||||
_nb_msgs++;
|
_nb_msgs++;
|
||||||
|
|
||||||
|
if (msg->header.is_video()) {
|
||||||
|
video_frames++;
|
||||||
|
}
|
||||||
|
|
||||||
// log to show the time of recv thread.
|
// log to show the time of recv thread.
|
||||||
srs_verbose("recv thread now=%"PRId64"us, got msg time=%"PRId64"ms, size=%d",
|
srs_verbose("recv thread now=%"PRId64"us, got msg time=%"PRId64"ms, size=%d",
|
||||||
srs_update_system_time_ms(), msg->header.timestamp, msg->size);
|
srs_update_system_time_ms(), msg->header.timestamp, msg->size);
|
||||||
|
|
|
@ -154,6 +154,8 @@ private:
|
||||||
SrsRequest* req;
|
SrsRequest* req;
|
||||||
// the msgs already got.
|
// the msgs already got.
|
||||||
int64_t _nb_msgs;
|
int64_t _nb_msgs;
|
||||||
|
// The video frames we got.
|
||||||
|
uint64_t video_frames;
|
||||||
// for mr(merged read),
|
// for mr(merged read),
|
||||||
// @see https://github.com/ossrs/srs/issues/241
|
// @see https://github.com/ossrs/srs/issues/241
|
||||||
bool mr;
|
bool mr;
|
||||||
|
@ -186,6 +188,7 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual int wait(int timeout_ms);
|
virtual int wait(int timeout_ms);
|
||||||
virtual int64_t nb_msgs();
|
virtual int64_t nb_msgs();
|
||||||
|
virtual uint64_t nb_video_frames();
|
||||||
virtual int error_code();
|
virtual int error_code();
|
||||||
virtual void set_cid(int v);
|
virtual void set_cid(int v);
|
||||||
virtual int get_cid();
|
virtual int get_cid();
|
||||||
|
|
|
@ -906,6 +906,7 @@ int SrsRtmpConn::do_publishing(SrsSource* source, SrsPublishRecvThread* trd)
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t nb_msgs = 0;
|
int64_t nb_msgs = 0;
|
||||||
|
uint64_t nb_frames = 0;
|
||||||
while (!disposed) {
|
while (!disposed) {
|
||||||
pprint->elapse();
|
pprint->elapse();
|
||||||
|
|
||||||
|
@ -941,6 +942,14 @@ int SrsRtmpConn::do_publishing(SrsSource* source, SrsPublishRecvThread* trd)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
nb_msgs = trd->nb_msgs();
|
nb_msgs = trd->nb_msgs();
|
||||||
|
|
||||||
|
// Update the stat for video fps.
|
||||||
|
// @remark https://github.com/ossrs/srs/issues/851
|
||||||
|
SrsStatistic* stat = SrsStatistic::instance();
|
||||||
|
if ((ret = stat->on_video_frames(req, (int)(trd->nb_video_frames() - nb_frames))) != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
nb_frames = trd->nb_video_frames();
|
||||||
|
|
||||||
// reportable
|
// reportable
|
||||||
if (pprint->can_print()) {
|
if (pprint->can_print()) {
|
||||||
|
|
|
@ -111,6 +111,7 @@ SrsStatisticStream::SrsStatisticStream()
|
||||||
kbps->set_io(NULL, NULL);
|
kbps->set_io(NULL, NULL);
|
||||||
|
|
||||||
nb_clients = 0;
|
nb_clients = 0;
|
||||||
|
nb_frames = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsStatisticStream::~SrsStatisticStream()
|
SrsStatisticStream::~SrsStatisticStream()
|
||||||
|
@ -129,6 +130,7 @@ int SrsStatisticStream::dumps(stringstream& ss)
|
||||||
<< SRS_JFIELD_STR("app", app) << SRS_JFIELD_CONT
|
<< SRS_JFIELD_STR("app", app) << SRS_JFIELD_CONT
|
||||||
<< SRS_JFIELD_ORG("live_ms", srs_get_system_time_ms()) << SRS_JFIELD_CONT
|
<< SRS_JFIELD_ORG("live_ms", srs_get_system_time_ms()) << SRS_JFIELD_CONT
|
||||||
<< SRS_JFIELD_ORG("clients", nb_clients) << SRS_JFIELD_CONT
|
<< SRS_JFIELD_ORG("clients", nb_clients) << SRS_JFIELD_CONT
|
||||||
|
<< SRS_JFIELD_ORG("frames", nb_frames) << SRS_JFIELD_CONT
|
||||||
<< SRS_JFIELD_ORG("send_bytes", kbps->get_send_bytes()) << SRS_JFIELD_CONT
|
<< SRS_JFIELD_ORG("send_bytes", kbps->get_send_bytes()) << SRS_JFIELD_CONT
|
||||||
<< SRS_JFIELD_ORG("recv_bytes", kbps->get_recv_bytes()) << SRS_JFIELD_CONT
|
<< SRS_JFIELD_ORG("recv_bytes", kbps->get_recv_bytes()) << SRS_JFIELD_CONT
|
||||||
<< SRS_JFIELD_OBJ("kbps")
|
<< SRS_JFIELD_OBJ("kbps")
|
||||||
|
@ -327,6 +329,18 @@ int SrsStatistic::on_audio_info(SrsRequest* req,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SrsStatistic::on_video_frames(SrsRequest* req, int nb_frames)
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
SrsStatisticVhost* vhost = create_vhost(req);
|
||||||
|
SrsStatisticStream* stream = create_stream(vhost, req);
|
||||||
|
|
||||||
|
stream->nb_frames += nb_frames;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void SrsStatistic::on_stream_publish(SrsRequest* req, int cid)
|
void SrsStatistic::on_stream_publish(SrsRequest* req, int cid)
|
||||||
{
|
{
|
||||||
SrsStatisticVhost* vhost = create_vhost(req);
|
SrsStatisticVhost* vhost = create_vhost(req);
|
||||||
|
|
|
@ -70,6 +70,7 @@ public:
|
||||||
bool active;
|
bool active;
|
||||||
int connection_cid;
|
int connection_cid;
|
||||||
int nb_clients;
|
int nb_clients;
|
||||||
|
uint64_t nb_frames;
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* stream total kbps.
|
* stream total kbps.
|
||||||
|
@ -172,6 +173,11 @@ public:
|
||||||
SrsCodecAudio acodec, SrsCodecAudioSampleRate asample_rate, SrsCodecAudioSoundType asound_type,
|
SrsCodecAudio acodec, SrsCodecAudioSampleRate asample_rate, SrsCodecAudioSoundType asound_type,
|
||||||
SrsAacObjectType aac_object
|
SrsAacObjectType aac_object
|
||||||
);
|
);
|
||||||
|
/**
|
||||||
|
* When got videos, update the frames.
|
||||||
|
* We only stat the total number of video frames.
|
||||||
|
*/
|
||||||
|
virtual int on_video_frames(SrsRequest* req, int nb_frames);
|
||||||
/**
|
/**
|
||||||
* when publish stream.
|
* when publish stream.
|
||||||
* @param req the request object of publish connection.
|
* @param req the request object of publish connection.
|
||||||
|
|
|
@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// current release version
|
// current release version
|
||||||
#define VERSION_MAJOR 2
|
#define VERSION_MAJOR 2
|
||||||
#define VERSION_MINOR 0
|
#define VERSION_MINOR 0
|
||||||
#define VERSION_REVISION 239
|
#define VERSION_REVISION 240
|
||||||
|
|
||||||
// generated by configure, only macros.
|
// generated by configure, only macros.
|
||||||
#include <srs_auto_headers.hpp>
|
#include <srs_auto_headers.hpp>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue