mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-26 04:31:37 +08:00
完善获取丢包率pull request; 新增MediaSource::getOwnerPoller接口
This commit is contained in:
parent
be995f9cd2
commit
b6d3ec5251
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
||||||
@ -221,6 +221,14 @@ int MediaSource::getLossRate(mediakit::TrackType type) {
|
|||||||
return listener->getLossRate(*this, type);
|
return listener->getLossRate(*this, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toolkit::EventPoller::Ptr MediaSource::getOwnerPoller() {
|
||||||
|
auto listener = _listener.lock();
|
||||||
|
if (!listener) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return listener->getOwnerPoller(*this);
|
||||||
|
}
|
||||||
|
|
||||||
void MediaSource::onReaderChanged(int size) {
|
void MediaSource::onReaderChanged(int size) {
|
||||||
auto listener = _listener.lock();
|
auto listener = _listener.lock();
|
||||||
if (listener) {
|
if (listener) {
|
||||||
@ -706,6 +714,15 @@ int MediaSourceEventInterceptor::getLossRate(MediaSource &sender, TrackType type
|
|||||||
return -1; //异常返回-1
|
return -1; //异常返回-1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toolkit::EventPoller::Ptr MediaSourceEventInterceptor::getOwnerPoller(MediaSource &sender) {
|
||||||
|
auto listener = _listener.lock();
|
||||||
|
if (listener) {
|
||||||
|
return listener->getOwnerPoller(sender);
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool MediaSourceEventInterceptor::setupRecord(MediaSource &sender, Recorder::type type, bool start, const string &custom_path, size_t max_second) {
|
bool MediaSourceEventInterceptor::setupRecord(MediaSource &sender, Recorder::type type, bool start, const string &custom_path, size_t max_second) {
|
||||||
auto listener = _listener.lock();
|
auto listener = _listener.lock();
|
||||||
if (!listener) {
|
if (!listener) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
||||||
@ -77,8 +77,10 @@ public:
|
|||||||
virtual void onReaderChanged(MediaSource &sender, int size);
|
virtual void onReaderChanged(MediaSource &sender, int size);
|
||||||
//流注册或注销事件
|
//流注册或注销事件
|
||||||
virtual void onRegist(MediaSource &sender, bool regist) {};
|
virtual void onRegist(MediaSource &sender, bool regist) {};
|
||||||
|
// 获取丢包率
|
||||||
virtual int getLossRate(MediaSource &sender, TrackType type) {return -1;};
|
virtual int getLossRate(MediaSource &sender, TrackType type) { return -1; }
|
||||||
|
// 获取所在线程
|
||||||
|
virtual toolkit::EventPoller::Ptr getOwnerPoller(MediaSource &sender) { return nullptr; }
|
||||||
|
|
||||||
////////////////////////仅供MultiMediaSourceMuxer对象继承////////////////////////
|
////////////////////////仅供MultiMediaSourceMuxer对象继承////////////////////////
|
||||||
// 开启或关闭录制
|
// 开启或关闭录制
|
||||||
@ -145,6 +147,8 @@ public:
|
|||||||
void startSendRtp(MediaSource &sender, const SendRtpArgs &args, const std::function<void(uint16_t, const toolkit::SockException &)> cb) override;
|
void startSendRtp(MediaSource &sender, const SendRtpArgs &args, const std::function<void(uint16_t, const toolkit::SockException &)> cb) override;
|
||||||
bool stopSendRtp(MediaSource &sender, const std::string &ssrc) override;
|
bool stopSendRtp(MediaSource &sender, const std::string &ssrc) override;
|
||||||
int getLossRate(MediaSource &sender, TrackType type) override;
|
int getLossRate(MediaSource &sender, TrackType type) override;
|
||||||
|
toolkit::EventPoller::Ptr getOwnerPoller(MediaSource &sender) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::weak_ptr<MediaSourceEvent> _listener;
|
std::weak_ptr<MediaSourceEvent> _listener;
|
||||||
};
|
};
|
||||||
@ -297,6 +301,10 @@ public:
|
|||||||
void startSendRtp(const MediaSourceEvent::SendRtpArgs &args, const std::function<void(uint16_t, const toolkit::SockException &)> cb);
|
void startSendRtp(const MediaSourceEvent::SendRtpArgs &args, const std::function<void(uint16_t, const toolkit::SockException &)> cb);
|
||||||
// 停止发送ps-rtp
|
// 停止发送ps-rtp
|
||||||
bool stopSendRtp(const std::string &ssrc);
|
bool stopSendRtp(const std::string &ssrc);
|
||||||
|
// 获取丢包率
|
||||||
|
int getLossRate(mediakit::TrackType type);
|
||||||
|
// 获取所在线程
|
||||||
|
toolkit::EventPoller::Ptr getOwnerPoller();
|
||||||
|
|
||||||
////////////////static方法,查找或生成MediaSource////////////////
|
////////////////static方法,查找或生成MediaSource////////////////
|
||||||
|
|
||||||
|
@ -151,3 +151,7 @@ void WebRtcPusher::onRtcConfigure(RtcConfigure &configure) const {
|
|||||||
int WebRtcPusher::getLossRate(MediaSource &sender,mediakit::TrackType type){
|
int WebRtcPusher::getLossRate(MediaSource &sender,mediakit::TrackType type){
|
||||||
return WebRtcTransportImp::getLossRate(type);
|
return WebRtcTransportImp::getLossRate(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toolkit::EventPoller::Ptr WebRtcPusher::getOwnerPoller(mediakit::MediaSource &sender) {
|
||||||
|
return getPoller();
|
||||||
|
}
|
@ -39,8 +39,10 @@ protected:
|
|||||||
std::string getOriginUrl(mediakit::MediaSource &sender) const override;
|
std::string getOriginUrl(mediakit::MediaSource &sender) const override;
|
||||||
// 获取媒体源客户端相关信息
|
// 获取媒体源客户端相关信息
|
||||||
std::shared_ptr<SockInfo> getOriginSock(mediakit::MediaSource &sender) const override;
|
std::shared_ptr<SockInfo> getOriginSock(mediakit::MediaSource &sender) const override;
|
||||||
|
// 获取丢包率
|
||||||
int getLossRate(mediakit::MediaSource &sender,mediakit::TrackType type) override;
|
int getLossRate(mediakit::MediaSource &sender,mediakit::TrackType type) override;
|
||||||
|
// 获取MediaSource归属线程
|
||||||
|
toolkit::EventPoller::Ptr getOwnerPoller(mediakit::MediaSource &sender) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WebRtcPusher(const EventPoller::Ptr &poller, const mediakit::RtspMediaSourceImp::Ptr &src,
|
WebRtcPusher(const EventPoller::Ptr &poller, const mediakit::RtspMediaSourceImp::Ptr &src,
|
||||||
|
@ -612,10 +612,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getLossRate() {
|
int getLossRate() {
|
||||||
if (!_rtcp_context.getExpectedPacketsInterval()) //_rtcp_context.getExpectedPacketsInterval()取值总为零?
|
if (!_rtcp_context.getExpectedPacketsInterval()) {
|
||||||
{
|
//_rtcp_context.getExpectedPacketsInterval()取值总为零?
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return _rtcp_context.geLostInterval() * 100 / _rtcp_context.getExpectedPacketsInterval();
|
return _rtcp_context.geLostInterval() * 100 / _rtcp_context.getExpectedPacketsInterval();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,19 +659,18 @@ std::shared_ptr<RtpChannel> MediaTrack::getRtpChannel(uint32_t ssrc) const{
|
|||||||
return it_chn->second;
|
return it_chn->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
int WebRtcTransportImp::getLossRate(mediakit::TrackType type){
|
int WebRtcTransportImp::getLossRate(mediakit::TrackType type) {
|
||||||
for(auto it : _ssrc_to_track){
|
for (auto &pr : _ssrc_to_track) {
|
||||||
auto ssrc = it.first;
|
auto ssrc = pr.first;
|
||||||
auto track = it.second;
|
auto &track = pr.second;
|
||||||
auto rtp_chn = track->getRtpChannel(ssrc);
|
auto rtp_chn = track->getRtpChannel(ssrc);
|
||||||
if(rtp_chn){
|
if (rtp_chn) {
|
||||||
InfoL << "-----------接收丢包率,ssrc------------- :" << ssrc << ",loss rate(%):" << rtp_chn->getLossRate() ;
|
if (track->media && type == track->media->type) {
|
||||||
if (track->media && type==track->media->type){
|
|
||||||
return rtp_chn->getLossRate();
|
return rtp_chn->getLossRate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebRtcTransportImp::onRtcp(const char *buf, size_t len) {
|
void WebRtcTransportImp::onRtcp(const char *buf, size_t len) {
|
||||||
|
Loading…
Reference in New Issue
Block a user