hls播放器优化 (#3064)

1. 连续切片下载失败后关闭播放器, 这种适用于源端服务器出现故障导致m3u8索引正常,但切片文件不正常时,尽快的能关闭播放器并通过web
hook上报业务系统,而不是仍旧不停的拉取ts切片.
2. 优化m3u8拉取失败时的快速重拉, 增加一个0.3秒的延时. 因为有时候httpClient已经_complete=true了,
但是alive()仍旧是true,所以稍微增加一个延时, 避免出现大量的m3u8重试, 实际上这里能否直接判断_complete=true?
3. 继续修改到哪里就把代码注释添加英文版本
This commit is contained in:
alexliyu7352
2023-12-01 14:43:35 +08:00
committed by GitHub
parent 86029d08af
commit 50281513d9
2 changed files with 99 additions and 37 deletions

View File

@@ -19,6 +19,7 @@
#define MIN_TIMEOUT_MULTIPLE 2
#define MAX_TIMEOUT_MULTIPLE 5
#define MAX_TRY_FETCH_INDEX_TIMES 5
#define MAX_TS_DOWNLOAD_FAILED_COUNT 10
namespace mediakit {
@@ -56,19 +57,22 @@ public:
/**
* 开始播放
* start play
*/
void play(const std::string &url) override;
/**
* 停止播放
* stop play
*/
void teardown() override;
protected:
/**
* 收到ts包
* @param data ts数据负载
* @param len ts包长度
* Received ts package
* @param data ts数据负载 ts data payload
* @param len ts包长度 ts package length
*/
virtual void onPacket(const char *data, size_t len) = 0;
@@ -80,7 +84,7 @@ private:
bool onRedirectUrl(const std::string &url, bool temporary) override;
private:
void playDelay();
void playDelay(float delay_sec = 0);
float delaySecond();
void fetchSegment();
void teardown_l(const toolkit::SockException &ex);
@@ -88,7 +92,8 @@ private:
private:
struct UrlComp {
//url忽略后面的参数
// url忽略后面的参数
// Ignore the parameters after the url?
bool operator()(const std::string& __x, const std::string& __y) const {
return toolkit::split(__x,"?")[0] < toolkit::split(__y,"?")[0];
}
@@ -108,6 +113,7 @@ private:
HttpTSPlayer::Ptr _http_ts_player;
int _timeout_multiple = MIN_TIMEOUT_MULTIPLE;
int _try_fetch_index_times = 0;
int _ts_download_failed_count = 0;
};
class HlsPlayerImp : public PlayerImp<HlsPlayer, PlayerBase>, private TrackListener {