mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-07-05 02:38:10 +08:00
优化播放器接口
This commit is contained in:
@@ -22,6 +22,8 @@ namespace Rtsp {
|
||||
_onRecvRTP(it->second, trackidx); \
|
||||
m_amapRtpSort[trackidx].erase(it);
|
||||
|
||||
const char RtspPlayer::kRtpType[] = "rtp_type";
|
||||
|
||||
RtspPlayer::RtspPlayer(void){
|
||||
}
|
||||
RtspPlayer::~RtspPlayer(void) {
|
||||
@@ -67,13 +69,34 @@ void RtspPlayer::teardown(){
|
||||
shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
void RtspPlayer::play(const char* strUrl){
|
||||
auto userAndPwd = FindField(strUrl,"://","@");
|
||||
eRtpType eType = (eRtpType)(int)(*this)[kRtpType];
|
||||
if(userAndPwd.empty()){
|
||||
play(strUrl,nullptr,nullptr,eType);
|
||||
return;
|
||||
}
|
||||
auto suffix = FindField(strUrl,"@",nullptr);
|
||||
auto url = StrPrinter << "rtsp://" << suffix << endl;
|
||||
if(userAndPwd.find(":") == string::npos){
|
||||
play(url.data(),userAndPwd.data(),nullptr,eType);
|
||||
return;
|
||||
}
|
||||
auto user = FindField(userAndPwd.data(),nullptr,":");
|
||||
auto pwd = FindField(userAndPwd.data(),":",nullptr);
|
||||
play(url.data(),user.data(),pwd.data(),eType);
|
||||
}
|
||||
//播放,指定是否走rtp over tcp
|
||||
void RtspPlayer::play(const char* strUrl, const char *strUser, const char *strPwd, eRtpType eType ) {
|
||||
InfoL <<strUrl <<" "<< eType;
|
||||
DebugL << strUrl << " "
|
||||
<< (strUser ? strUser : "null") << " "
|
||||
<< (strPwd ? strPwd:"null") << " "
|
||||
<< eType;
|
||||
teardown();
|
||||
if(strUser && strPwd){
|
||||
if(strUser){
|
||||
char _authorization[30];
|
||||
string tmp = StrPrinter << strUser << ":" << strPwd << endl;
|
||||
string tmp = StrPrinter << strUser << ":" << (strPwd ? strPwd : "") << endl;
|
||||
av_base64_encode(_authorization, sizeof(_authorization), (const unsigned char *) tmp.c_str(), tmp.size());
|
||||
m_strAuthorization = _authorization;
|
||||
}
|
||||
|
||||
@@ -36,9 +36,13 @@ namespace Rtsp {
|
||||
class RtspPlayer: public PlayerBase,public TcpClient {
|
||||
public:
|
||||
typedef std::shared_ptr<RtspPlayer> Ptr;
|
||||
//设置rtp传输类型,可选项有0(tcp,默认)、1(udp)、2(组播)
|
||||
//设置方法:player[RtspPlayer::kRtpType] = 0/1/2;
|
||||
static const char kRtpType[];
|
||||
|
||||
RtspPlayer();
|
||||
virtual ~RtspPlayer(void);
|
||||
void play(const char* strUrl, const char *strUser, const char *strPwd, eRtpType eType) override;
|
||||
void play(const char* strUrl) override;
|
||||
void pause(bool bPause) override;
|
||||
void teardown() override;
|
||||
float getRtpLossRate(int iTrackId) const override;
|
||||
@@ -84,6 +88,7 @@ private:
|
||||
onPlayResult(ex);
|
||||
}
|
||||
|
||||
void play(const char* strUrl, const char *strUser, const char *strPwd, eRtpType eType);
|
||||
void onConnect(const SockException &err) override;
|
||||
void onRecv(const Socket::Buffer::Ptr &pBuf) override;
|
||||
void onErr(const SockException &ex) override;
|
||||
|
||||
Reference in New Issue
Block a user