tt.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // #include <webrtc/api/video_track_source.h>
  2. // #include <webrtc/api/video_track.h>
  3. // #include <webrtc/api/media_stream_interface.h>
  4. // #include <webrtc/media/base/adapted_video_track_source.h>
  5. // class CustomVideoTrackSource : public webrtc::AdaptedVideoTrackSource {
  6. // public:
  7. // bool AddEncodedVideoFrame(const std::vector<uint8_t>& videoData, int64_t timestamp_us) {
  8. // // 1. 创建 WebRTC 视频帧
  9. // rtc::scoped_refptr<webrtc::I420BufferInterface> i420_buffer =
  10. // webrtc::I420Buffer::Create(1920, 1080);
  11. // // 2. 将编码后的数据拷贝到 I420 视频帧
  12. // // 这里需要解码视频数据并转换到 I420 格式
  13. // // 您可以使用 FFmpeg 或其他视频解码库来实现
  14. // // 3. 创建 VideoFrame 对象
  15. // webrtc::VideoFrame frame(i420_buffer, 0, timestamp_us, webrtc::kVideoRotation_0);
  16. // // 4. 通知 AdaptedVideoTrackSource 有新的视频帧
  17. // OnFrame(frame);
  18. // return true;
  19. // }
  20. // };
  21. // class MediaTrack {
  22. // public:
  23. // void OnAddTrack(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track) {
  24. // if (track->kind() == webrtc::MediaStreamTrackInterface::kVideoKind) {
  25. // // 获取视频轨道
  26. // rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track =
  27. // static_cast<webrtc::VideoTrackInterface*>(track.get());
  28. // // 创建自定义视频源
  29. // rtc::scoped_refptr<CustomVideoTrackSource> source =
  30. // new rtc::RefCountedObject<CustomVideoTrackSource>();
  31. // // 将视频源设置到视频轨道
  32. // video_track->AddOrUpdateSink(source.get(), rtc::VideoSinkWants());
  33. // }
  34. // }
  35. // };
  36. // int main() {
  37. // MediaTrack track;
  38. // rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> video_track =
  39. // webrtc::MediaStreamTrackInterface::Create("video_track", webrtc::MediaStreamTrackInterface::kVideoKind);
  40. // track.OnAddTrack(video_track);
  41. // // 在其他地方添加编码好的视频数据
  42. // std::vector<uint8_t> videoData = { /* 您的编码好的视频数据 */ };
  43. // int64_t timestamp_us = 0; // 视频时间戳, 单位为微秒
  44. // static_cast<CustomVideoTrackSource*>(video_track->GetSource())->AddEncodedVideoFrame(videoData, timestamp_us);
  45. // return 0;
  46. // }
  47. // // 1. 自行编码视频数据
  48. // std::vector<uint8_t> encoded_video_data = EncodeVideoData(raw_video_data);
  49. // // 2. 创建自定义的视频源
  50. // class CustomVideoTrackSource : public webrtc::VideoTrackSource {
  51. // public:
  52. // rtc::scoped_refptr<webrtc::I420BufferInterface> GetI420VideoFrame() override {
  53. // // 返回预先编码好的 webrtc::VideoFrame 对象
  54. // return webrtc::VideoFrame::Create(
  55. // encoded_video_data.data(), video_width, video_height,
  56. // webrtc::kVideoRotation_0, timestamp_us);
  57. // }
  58. // bool is_screencast() const override { return false; }
  59. // absl::optional<bool> needs_denoising() const override { return absl::nullopt; }
  60. // };
  61. // // 3. 创建视频轨道
  62. // rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track =
  63. // g_peer_connection_factory->CreateVideoTrack(
  64. // "custom_video_track", new rtc::RefCountedObject<CustomVideoTrackSource>());
  65. // // 4. 将视频轨道添加到 webrtc::PeerConnection 中
  66. // if (peer_connection) {
  67. // peer_connection->AddTrack(video_track);
  68. // }