// #include // #include // #include // #include // class CustomVideoTrackSource : public webrtc::AdaptedVideoTrackSource { // public: // bool AddEncodedVideoFrame(const std::vector& videoData, int64_t timestamp_us) { // // 1. 创建 WebRTC 视频帧 // rtc::scoped_refptr i420_buffer = // webrtc::I420Buffer::Create(1920, 1080); // // 2. 将编码后的数据拷贝到 I420 视频帧 // // 这里需要解码视频数据并转换到 I420 格式 // // 您可以使用 FFmpeg 或其他视频解码库来实现 // // 3. 创建 VideoFrame 对象 // webrtc::VideoFrame frame(i420_buffer, 0, timestamp_us, webrtc::kVideoRotation_0); // // 4. 通知 AdaptedVideoTrackSource 有新的视频帧 // OnFrame(frame); // return true; // } // }; // class MediaTrack { // public: // void OnAddTrack(rtc::scoped_refptr track) { // if (track->kind() == webrtc::MediaStreamTrackInterface::kVideoKind) { // // 获取视频轨道 // rtc::scoped_refptr video_track = // static_cast(track.get()); // // 创建自定义视频源 // rtc::scoped_refptr source = // new rtc::RefCountedObject(); // // 将视频源设置到视频轨道 // video_track->AddOrUpdateSink(source.get(), rtc::VideoSinkWants()); // } // } // }; // int main() { // MediaTrack track; // rtc::scoped_refptr video_track = // webrtc::MediaStreamTrackInterface::Create("video_track", webrtc::MediaStreamTrackInterface::kVideoKind); // track.OnAddTrack(video_track); // // 在其他地方添加编码好的视频数据 // std::vector videoData = { /* 您的编码好的视频数据 */ }; // int64_t timestamp_us = 0; // 视频时间戳, 单位为微秒 // static_cast(video_track->GetSource())->AddEncodedVideoFrame(videoData, timestamp_us); // return 0; // } // // 1. 自行编码视频数据 // std::vector encoded_video_data = EncodeVideoData(raw_video_data); // // 2. 创建自定义的视频源 // class CustomVideoTrackSource : public webrtc::VideoTrackSource { // public: // rtc::scoped_refptr GetI420VideoFrame() override { // // 返回预先编码好的 webrtc::VideoFrame 对象 // return webrtc::VideoFrame::Create( // encoded_video_data.data(), video_width, video_height, // webrtc::kVideoRotation_0, timestamp_us); // } // bool is_screencast() const override { return false; } // absl::optional needs_denoising() const override { return absl::nullopt; } // }; // // 3. 创建视频轨道 // rtc::scoped_refptr video_track = // g_peer_connection_factory->CreateVideoTrack( // "custom_video_track", new rtc::RefCountedObject()); // // 4. 将视频轨道添加到 webrtc::PeerConnection 中 // if (peer_connection) { // peer_connection->AddTrack(video_track); // }