优化播放器接口

This commit is contained in:
xiongziliang
2017-08-03 13:55:46 +08:00
parent fcfb434cf2
commit afc36f5ef4
15 changed files with 98 additions and 66 deletions

View File

@@ -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;
}

View File

@@ -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;