test_synchronizer_v2.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "utils_synchronizer_v2.h"
  2. #include <iostream>
  3. #include <thread>
  4. #include <chrono>
  5. using namespace av::utils;
  6. int main() {
  7. std::cout << "=== SynchronizerV2 Test ===\n";
  8. // 创建同步器
  9. SyncConfigV2 config;
  10. config.strategy = SyncStrategy::AUDIO_MASTER;
  11. SynchronizerV2 sync(config);
  12. // 初始化和启动
  13. auto result = sync.initialize();
  14. if (result != ErrorCode::SUCCESS) {
  15. std::cout << "Failed to initialize synchronizer\n";
  16. return -1;
  17. }
  18. sync.setStreamInfo(true, true); // 有音频和视频流
  19. result = sync.start();
  20. if (result != ErrorCode::SUCCESS) {
  21. std::cout << "Failed to start synchronizer\n";
  22. return -1;
  23. }
  24. std::cout << "Synchronizer started successfully\n";
  25. // 模拟音视频时钟更新
  26. double audioTime = 0.0;
  27. double videoTime = 0.0;
  28. double frame_last_duration = 0.033;
  29. for (int i = 0; i < 10; ++i) {
  30. // 更新音频时钟
  31. sync.setClock(ClockType::AUDIO, audioTime, i);
  32. // 更新视频时钟(稍微不同步)
  33. videoTime = audioTime + 0.02; // 20ms ahead
  34. sync.setClock(ClockType::VIDEO, videoTime, i);
  35. std::cout << "\nFrame " << i << ":\n";
  36. std::cout << " Audio Clock: " << sync.getClock(ClockType::AUDIO) << "s\n";
  37. std::cout << " Video Clock: " << sync.getClock(ClockType::VIDEO) << "s\n";
  38. std::cout << " Master Clock: " << sync.getMasterClock() << "s\n";
  39. // 测试视频帧延迟计算
  40. double delay = sync.computeTargetDelay(frame_last_duration, videoTime);
  41. std::cout << " Computed video delay: " << delay << "s\n";
  42. // 模拟音频同步
  43. short audio_buffer[2048];
  44. int original_size = 1920;
  45. int synced_size = sync.synchronizeAudio(audio_buffer, original_size, audioTime);
  46. std::cout << " Original audio size: " << original_size << ", Synced audio size: " << synced_size << "\n";
  47. audioTime += 0.033; // 30fps interval
  48. // 短暂延迟
  49. std::this_thread::sleep_for(std::chrono::milliseconds(10));
  50. }
  51. // 测试暂停和恢复
  52. std::cout << "\nTesting pause/resume...\n";
  53. sync.pause();
  54. // std::cout << "Paused: " << (sync.isPaused() ? "true" : "false") << "\n";
  55. sync.resume();
  56. // std::cout << "Resumed: " << (sync.isPaused() ? "false" : "true") << "\n";
  57. // 测试同步策略切换
  58. std::cout << "\nTesting sync strategy change...\n";
  59. sync.setSyncStrategy(SyncStrategy::VIDEO_MASTER);
  60. std::cout << "New strategy: " << static_cast<int>(sync.getSyncStrategy()) << "\n";
  61. // std::cout << "Master clock type: " << static_cast<int>(sync.getMasterClockType()) << "\n";
  62. // 测试播放速度
  63. std::cout << "\nTesting playback speed...\n";
  64. sync.setClockSpeed(ClockType::AUDIO, 1.5);
  65. // std::cout << "Playback speed: " << sync.getPlaybackSpeed() << "\n";
  66. // 停止同步器
  67. sync.stop();
  68. std::cout << "\nSynchronizer stopped\n";
  69. std::cout << "\n=== Test Completed ===\n";
  70. return 0;
  71. }