| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include "utils_synchronizer_v2.h"
- #include <iostream>
- #include <thread>
- #include <chrono>
- using namespace av::utils;
- int main() {
- std::cout << "=== SynchronizerV2 Test ===\n";
-
- // 创建同步器
- SyncConfigV2 config;
- config.strategy = SyncStrategy::AUDIO_MASTER;
-
- SynchronizerV2 sync(config);
-
- // 初始化和启动
- auto result = sync.initialize();
- if (result != ErrorCode::SUCCESS) {
- std::cout << "Failed to initialize synchronizer\n";
- return -1;
- }
-
- sync.setStreamInfo(true, true); // 有音频和视频流
-
- result = sync.start();
- if (result != ErrorCode::SUCCESS) {
- std::cout << "Failed to start synchronizer\n";
- return -1;
- }
-
- std::cout << "Synchronizer started successfully\n";
-
- // 模拟音视频时钟更新
- double audioTime = 0.0;
- double videoTime = 0.0;
- double frame_last_duration = 0.033;
- for (int i = 0; i < 10; ++i) {
- // 更新音频时钟
- sync.setClock(ClockType::AUDIO, audioTime, i);
-
- // 更新视频时钟(稍微不同步)
- videoTime = audioTime + 0.02; // 20ms ahead
- sync.setClock(ClockType::VIDEO, videoTime, i);
-
- std::cout << "\nFrame " << i << ":\n";
- std::cout << " Audio Clock: " << sync.getClock(ClockType::AUDIO) << "s\n";
- std::cout << " Video Clock: " << sync.getClock(ClockType::VIDEO) << "s\n";
- std::cout << " Master Clock: " << sync.getMasterClock() << "s\n";
-
- // 测试视频帧延迟计算
- double delay = sync.computeTargetDelay(frame_last_duration, videoTime);
- std::cout << " Computed video delay: " << delay << "s\n";
- // 模拟音频同步
- short audio_buffer[2048];
- int original_size = 1920;
- int synced_size = sync.synchronizeAudio(audio_buffer, original_size, audioTime);
- std::cout << " Original audio size: " << original_size << ", Synced audio size: " << synced_size << "\n";
- audioTime += 0.033; // 30fps interval
-
- // 短暂延迟
- std::this_thread::sleep_for(std::chrono::milliseconds(10));
- }
-
- // 测试暂停和恢复
- std::cout << "\nTesting pause/resume...\n";
- sync.pause();
- // std::cout << "Paused: " << (sync.isPaused() ? "true" : "false") << "\n";
-
- sync.resume();
- // std::cout << "Resumed: " << (sync.isPaused() ? "false" : "true") << "\n";
-
- // 测试同步策略切换
- std::cout << "\nTesting sync strategy change...\n";
- sync.setSyncStrategy(SyncStrategy::VIDEO_MASTER);
- std::cout << "New strategy: " << static_cast<int>(sync.getSyncStrategy()) << "\n";
- // std::cout << "Master clock type: " << static_cast<int>(sync.getMasterClockType()) << "\n";
-
- // 测试播放速度
- std::cout << "\nTesting playback speed...\n";
- sync.setClockSpeed(ClockType::AUDIO, 1.5);
- // std::cout << "Playback speed: " << sync.getPlaybackSpeed() << "\n";
-
- // 停止同步器
- sync.stop();
- std::cout << "\nSynchronizer stopped\n";
-
- std::cout << "\n=== Test Completed ===\n";
- return 0;
- }
|