add local track
parent
cc659c89d6
commit
9e1a4a28e6
|
@ -64,8 +64,6 @@ MainWindow::MainWindow(QWidget *parent)
|
|||
ui->setupUi(this);
|
||||
ui->openGLWidget->show();
|
||||
|
||||
mHandler->InitWebrtc();
|
||||
this->mLocalVideoTrack = mHandler->VideoTrack();
|
||||
TCHAR username[UNLEN + 1];
|
||||
DWORD size = UNLEN + 1;
|
||||
GetUserName((TCHAR*)username, &size);
|
||||
|
@ -98,10 +96,13 @@ void WebrtcHanlder::SetRemotePeerName(QString remote)
|
|||
WebrtcHanlder::WebrtcHanlder()
|
||||
{
|
||||
mVideoTrack = nullptr;
|
||||
mAudioTrack = nullptr;
|
||||
m_peer_connection_factory_ = nullptr;
|
||||
}
|
||||
|
||||
int WebrtcHanlder::InitWebrtc()
|
||||
{
|
||||
|
||||
m_peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(
|
||||
nullptr /* network_thread */, nullptr /* worker_thread */,
|
||||
nullptr /* signaling_thread */, nullptr /* default_adm */,
|
||||
|
@ -125,6 +126,9 @@ int WebrtcHanlder::InitWebrtc()
|
|||
server.uri = "stun:stun.l.google.com:19302"; // stun服务器
|
||||
config.servers.push_back(server);
|
||||
|
||||
if(m_peer_connection_ != nullptr){
|
||||
m_peer_connection_.release();
|
||||
}
|
||||
m_peer_connection_ = m_peer_connection_factory_->CreatePeerConnection(
|
||||
config, nullptr, nullptr, this);
|
||||
|
||||
|
@ -134,38 +138,7 @@ int WebrtcHanlder::InitWebrtc()
|
|||
x->show();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track(
|
||||
m_peer_connection_factory_->CreateAudioTrack(
|
||||
kAudioLabel, m_peer_connection_factory_->CreateAudioSource(
|
||||
cricket::AudioOptions())));
|
||||
|
||||
auto result_or_error = m_peer_connection_->AddTrack(audio_track, {kStreamId});
|
||||
if (!result_or_error.ok()) {
|
||||
qDebug() << "Failed to add audio track to PeerConnection: "
|
||||
<< result_or_error.error().message();
|
||||
}
|
||||
|
||||
gLog()->Log((QString::asprintf("%s %d",__FILE__,__LINE__) +
|
||||
" m_peer_connection_ AddTrack" + kAudioLabel).toStdString());
|
||||
rtc::scoped_refptr<MyCapturer> video_device = new rtc::RefCountedObject<MyCapturer>();
|
||||
if (video_device) {
|
||||
video_device->startCapturer();
|
||||
rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track_(
|
||||
m_peer_connection_factory_->CreateVideoTrack(kVideoLabel, video_device));
|
||||
qDebug()<<"local track is "<<video_track_->id().c_str();
|
||||
result_or_error = m_peer_connection_->AddTrack(video_track_, { kStreamId });
|
||||
mVideoTrack = video_track_.get();
|
||||
video_track_->AddRef();
|
||||
if (!result_or_error.ok()) {
|
||||
qDebug() << "Failed to add video track to PeerConnection: "
|
||||
<< result_or_error.error().message();
|
||||
}
|
||||
gLog()->Log((QString::asprintf("%s %d",__FILE__,__LINE__) +
|
||||
" m_peer_connection_ AddTrack" + kVideoLabel).toStdString());
|
||||
} else {
|
||||
qDebug()<< "OpenVideoCaptureDevice failed";
|
||||
}
|
||||
AddLocalTrack();
|
||||
}
|
||||
|
||||
|
||||
|
@ -269,6 +242,61 @@ webrtc::VideoTrackInterface *WebrtcHanlder::VideoTrack()
|
|||
return mVideoTrack;
|
||||
}
|
||||
|
||||
void WebrtcHanlder::AddLocalTrack()
|
||||
{
|
||||
if(mAudioTrack == nullptr){
|
||||
rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track(
|
||||
m_peer_connection_factory_->CreateAudioTrack(
|
||||
kAudioLabel, m_peer_connection_factory_->CreateAudioSource(
|
||||
cricket::AudioOptions())));
|
||||
|
||||
auto result_or_error = m_peer_connection_->AddTrack(audio_track, {kStreamId});
|
||||
if (!result_or_error.ok()) {
|
||||
qDebug() << "Failed to add audio track to PeerConnection: "
|
||||
<< result_or_error.error().message();
|
||||
}
|
||||
mAudioTrack = audio_track.get();
|
||||
}else{
|
||||
auto result_or_error = m_peer_connection_->AddTrack(mAudioTrack, {kStreamId});
|
||||
if (!result_or_error.ok()) {
|
||||
qDebug() << "Failed to add audio track to PeerConnection: "
|
||||
<< result_or_error.error().message();
|
||||
}
|
||||
}
|
||||
|
||||
gLog()->Log((QString::asprintf("%s %d",__FILE__,__LINE__) +
|
||||
" m_peer_connection_ AddTrack" + kAudioLabel).toStdString());
|
||||
if(mVideoTrack == nullptr){
|
||||
rtc::scoped_refptr<MyCapturer> video_device = new rtc::RefCountedObject<MyCapturer>();
|
||||
if (video_device) {
|
||||
video_device->startCapturer();
|
||||
rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track_(
|
||||
m_peer_connection_factory_->CreateVideoTrack(kVideoLabel, video_device));
|
||||
qDebug()<<"local track is "<<video_track_->id().c_str();
|
||||
auto result_or_error = m_peer_connection_->AddTrack(video_track_, { kStreamId });
|
||||
mVideoTrack = video_track_.get();
|
||||
video_track_->AddRef();
|
||||
if (!result_or_error.ok()) {
|
||||
qDebug() << "Failed to add video track to PeerConnection: "
|
||||
<< result_or_error.error().message();
|
||||
}
|
||||
gLog()->Log((QString::asprintf("%s %d",__FILE__,__LINE__) +
|
||||
" m_peer_connection_ AddTrack" + kVideoLabel).toStdString());
|
||||
} else {
|
||||
qDebug()<< "OpenVideoCaptureDevice failed";
|
||||
}
|
||||
}else{
|
||||
auto result_or_error = m_peer_connection_->AddTrack(mVideoTrack, { kStreamId });
|
||||
if (!result_or_error.ok()) {
|
||||
qDebug() << "Failed to add video track to PeerConnection: "
|
||||
<< result_or_error.error().message();
|
||||
}
|
||||
gLog()->Log((QString::asprintf("%s %d",__FILE__,__LINE__) +
|
||||
" m_peer_connection_ AddTrack" + kVideoLabel).toStdString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
WebrtcHanlder::~WebrtcHanlder()
|
||||
{
|
||||
|
||||
|
@ -458,8 +486,12 @@ void MainWindow::itemClicked(QModelIndex index)
|
|||
{
|
||||
if(!mSignalClient->Connected()){
|
||||
qDebug()<<"请先连接信令服务";
|
||||
return;
|
||||
}
|
||||
mHandler->InitWebrtc();
|
||||
this->mLocalVideoTrack = mHandler->VideoTrack();
|
||||
qDebug()<<mModel->item(index.row())->text();
|
||||
|
||||
mRemoteName = mModel->item(index.row())->text();
|
||||
if(mRemoteName == this->mPeerName){
|
||||
return;
|
||||
|
|
|
@ -110,6 +110,9 @@ public:
|
|||
void SetRemoteCandidate(QString);
|
||||
void CreateAnwer();
|
||||
webrtc::VideoTrackInterface *VideoTrack();
|
||||
void AddLocalTrack();
|
||||
|
||||
|
||||
protected:
|
||||
~WebrtcHanlder();
|
||||
//
|
||||
|
@ -142,6 +145,7 @@ private:
|
|||
SignalClient *mClient;
|
||||
QString mRemoteName;
|
||||
webrtc::VideoTrackInterface *mVideoTrack;
|
||||
webrtc::AudioTrackInterface *mAudioTrack;
|
||||
};
|
||||
|
||||
class MainWindow :public QMainWindow
|
||||
|
|
Loading…
Reference in New Issue