使用ffmpeg和sdl实现多路音频混合播放

文章目录

  • 前言
  • 一、 如何实现?
    • 1、回调式打开设备
    • 2、注册多路回调
    • 3、写入队列
    • 4、混合音频
  • 二、完整代码
    • 1、头文件
    • 2、具体实现
  • 三、使用示例
    • 1、播放音频
    • 2、多路播放音频
  • 总结


前言

音频的播放通常是单例的,在进程内通常一个播放设备只能打开一次,且只支持一个写入。写播放器的时候,会遇到需要实现多开同时播放多个视频,比如视频剪辑工具的多轨道播放。这个时候就需要采用一定的方法,比如音频混合。本文将提供一种基于ffmpeg和sdl实现的音频多路混合的方法。


一、 如何实现?

1、回调式打开设备

为实现多路共用一个播放设备,只能采用SDL的回调式打开音频设备。
回调方法

static std::map<void*, std::function<void(void* userdata, Uint8* stream, int len)>> _audioCallbacks;//记录每一路音频的回调方法
//总的回调方法
static void _audio_callback_sum(void* userdata, uint8_t* stream, int len)
{
   
	memset(stream, 0, len);
	std::unique_lock< std::mutex >lck

你可能感兴趣的:(c++,音视频,ffmpeg,c++,音视频,sdl,音频)