2021-10-15 16:27:17 +08:00
/*
2023-12-09 16:23:51 +08:00
* Copyright ( c ) 2016 - present The ZLMediaKit project authors . All Rights Reserved .
2021-10-15 16:27:17 +08:00
*
2023-12-09 16:23:51 +08:00
* This file is part of ZLMediaKit ( https : //github.com/ZLMediaKit/ZLMediaKit).
2021-10-15 16:27:17 +08:00
*
2023-12-09 16:23:51 +08:00
* Use of this source code is governed by MIT - like license that can be found in the
2021-10-15 16:27:17 +08:00
* LICENSE file in the root of the source tree . All contributing project authors
* may be found in the AUTHORS file in the root of the source tree .
*/
# ifndef ZLMEDIAKIT_WEBRTCPLAYER_H
# define ZLMEDIAKIT_WEBRTCPLAYER_H
# include "WebRtcTransport.h"
2022-11-29 11:07:13 +08:00
# include "Rtsp/RtspMediaSource.h"
2021-10-15 16:27:17 +08:00
2022-09-18 21:03:05 +08:00
namespace mediakit {
2021-10-15 16:27:17 +08:00
class WebRtcPlayer : public WebRtcTransportImp {
public :
using Ptr = std : : shared_ptr < WebRtcPlayer > ;
2024-03-23 22:46:30 +08:00
static Ptr create ( const EventPoller : : Ptr & poller , const RtspMediaSource : : Ptr & src , const MediaInfo & info ) ;
2023-05-29 14:48:13 +08:00
MediaInfo getMediaInfo ( ) { return _media_info ; }
2021-10-15 16:27:17 +08:00
protected :
///////WebRtcTransportImp override///////
void onStartWebRTC ( ) override ;
void onDestory ( ) override ;
void onRtcConfigure ( RtcConfigure & configure ) const override ;
private :
2024-03-23 22:46:30 +08:00
WebRtcPlayer ( const EventPoller : : Ptr & poller , const RtspMediaSource : : Ptr & src , const MediaInfo & info ) ;
2021-10-15 16:27:17 +08:00
2024-06-16 09:37:33 +08:00
void sendConfigFrames ( uint32_t before_seq , uint32_t sample_rate , uint32_t timestamp , uint64_t ntp_timestamp ) ;
2021-10-15 16:27:17 +08:00
private :
2024-09-19 14:53:50 +08:00
// 媒体相关元数据 [AUTO-TRANSLATED:f4cf8045]
// Media related metadata
2022-09-18 21:03:05 +08:00
MediaInfo _media_info ;
2024-09-19 14:53:50 +08:00
// 播放的rtsp源 [AUTO-TRANSLATED:9963eed1]
// Playing rtsp source
2023-02-20 16:23:29 +08:00
std : : weak_ptr < RtspMediaSource > _play_src ;
2024-06-16 09:37:33 +08:00
2024-09-19 14:53:50 +08:00
// rtp 直接转发情况下通常会缺少 sps/pps, 在转发 rtp 前, 先发送一次相关帧信息, 部分情况下是可以播放的 [AUTO-TRANSLATED:65fdf16a]
// In the case of direct RTP forwarding, sps/pps is usually missing. Before forwarding RTP, send the relevant frame information once. In some cases, it can be played.
2024-06-16 09:37:33 +08:00
bool _send_config_frames_once { false } ;
2024-09-19 14:53:50 +08:00
// 播放rtsp源的reader对象 [AUTO-TRANSLATED:7b305055]
// Reader object for playing rtsp source
2022-09-18 21:03:05 +08:00
RtspMediaSource : : RingType : : RingReader : : Ptr _reader ;
2021-10-15 16:27:17 +08:00
} ;
2022-09-18 21:03:05 +08:00
} // namespace mediakit
# endif // ZLMEDIAKIT_WEBRTCPLAYER_H