123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // #include <webrtc/api/video_track_source.h>
- // #include <webrtc/api/video_track.h>
- // #include <webrtc/api/media_stream_interface.h>
- // #include <webrtc/media/base/adapted_video_track_source.h>
- // class CustomVideoTrackSource : public webrtc::AdaptedVideoTrackSource {
- // public:
- // bool AddEncodedVideoFrame(const std::vector<uint8_t>& videoData, int64_t timestamp_us) {
- // // 1. 创建 WebRTC 视频帧
- // rtc::scoped_refptr<webrtc::I420BufferInterface> 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<webrtc::MediaStreamTrackInterface> track) {
- // if (track->kind() == webrtc::MediaStreamTrackInterface::kVideoKind) {
- // // 获取视频轨道
- // rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track =
- // static_cast<webrtc::VideoTrackInterface*>(track.get());
- // // 创建自定义视频源
- // rtc::scoped_refptr<CustomVideoTrackSource> source =
- // new rtc::RefCountedObject<CustomVideoTrackSource>();
- // // 将视频源设置到视频轨道
- // video_track->AddOrUpdateSink(source.get(), rtc::VideoSinkWants());
- // }
- // }
- // };
- // int main() {
- // MediaTrack track;
- // rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> video_track =
- // webrtc::MediaStreamTrackInterface::Create("video_track", webrtc::MediaStreamTrackInterface::kVideoKind);
- // track.OnAddTrack(video_track);
- // // 在其他地方添加编码好的视频数据
- // std::vector<uint8_t> videoData = { /* 您的编码好的视频数据 */ };
- // int64_t timestamp_us = 0; // 视频时间戳, 单位为微秒
- // static_cast<CustomVideoTrackSource*>(video_track->GetSource())->AddEncodedVideoFrame(videoData, timestamp_us);
- // return 0;
- // }
- // // 1. 自行编码视频数据
- // std::vector<uint8_t> encoded_video_data = EncodeVideoData(raw_video_data);
- // // 2. 创建自定义的视频源
- // class CustomVideoTrackSource : public webrtc::VideoTrackSource {
- // public:
- // rtc::scoped_refptr<webrtc::I420BufferInterface> 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<bool> needs_denoising() const override { return absl::nullopt; }
- // };
- // // 3. 创建视频轨道
- // rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track =
- // g_peer_connection_factory->CreateVideoTrack(
- // "custom_video_track", new rtc::RefCountedObject<CustomVideoTrackSource>());
- // // 4. 将视频轨道添加到 webrtc::PeerConnection 中
- // if (peer_connection) {
- // peer_connection->AddTrack(video_track);
- // }
|