#include "utils_synchronizer_v2.h" #include #include #include 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(sync.getSyncStrategy()) << "\n"; // std::cout << "Master clock type: " << static_cast(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; }