- Fmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的便携性。
-
- FFmpeg 可以在 Linux、Mac OS X、Microsoft Windows、BSDs、Solaris 等各种构建环境、机器架构和配置下编译、运行,并通过测试基础设施 FATE。
-
- 它包含了 libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale 和 libswresample,可以被应用程序使用。还有 ffmpeg、ffplay 和 ffprobe,可以被终端用户用于转码和播放。
ffplay为ffmpeg中的一部分,官网给的源码编译后默认无此模块,需要提前安装sdl库,安装完成后才可编译出ffplay模块。执行简单命令ffplay alarm.mp3即可播放。
- Windows:正常播放;
-
- 中标 x86:需要源码编译ffmpeg及相关库,且在中标下编译完成后运行失败,未完成验证。
[ffmpeg在centos7下编译安装无ffplay的问题解决_YellowShite的博客-CSDN博客](//blog.csdn.net/YellowShite/article/details/112305636?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.0>)
该方案可行,但存在环境问题,需要在linux客户机进行编译ffmpeg及ffplay模块。且仅使用ffplay为ffmpeg中的一部分,其成本较大。
miniaudio是一个只有单.h文件的音频播放和抓取库。它跨平台,它简单易用。相比PortAudio和rtAudio,它只有一个.h文件,直接引用,不需要提前编译成lib文件。
GitHub - mackron/miniaudio: Single file audio playback and capture library written in C.
star 1.8k!!!!
- #define MINIAUDIO_IMPLEMENTATION
- #include "miniaudio.h"
-
- #include
-
- void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount)
- {
- ma_decoder* pDecoder = (ma_decoder*)pDevice->pUserData;
- if (pDecoder == NULL) {
- return;
- }
-
- ma_decoder_read_pcm_frames(pDecoder, pOutput, frameCount);
-
- (void)pInput;
- }
-
- int main()
- {
- ma_result result;
- ma_decoder decoder;
- ma_device_config deviceConfig;
- ma_device device;
-
- const char* pFilePath = "D:/alarm.mp3";
- // const char* pFilePath = "./alarm.mp3";
-
- result = ma_decoder_init_file(pFilePath, NULL, &decoder);
- if (result != MA_SUCCESS) {
- return -2;
- }
-
- deviceConfig = ma_device_config_init(ma_device_type_playback);
- deviceConfig.playback.format = decoder.outputFormat;
- deviceConfig.playback.channels = decoder.outputChannels;
- deviceConfig.sampleRate = decoder.outputSampleRate;
- deviceConfig.dataCallback = data_callback;
- deviceConfig.pUserData = &decoder;
-
- if (ma_device_init(NULL, &deviceConfig, &device) != MA_SUCCESS) {
- printf("Failed to open playback device.\\n");
- ma_decoder_uninit(&decoder);
- return -3;
- }
-
- if (ma_device_start(&device) != MA_SUCCESS) {
- printf("Failed to start playback device.\\n");
- ma_device_uninit(&device);
- ma_decoder_uninit(&decoder);
- return -4;
- }
-
- printf("Press Enter to quit...");
- getchar();
-
- ma_device_uninit(&device);
- ma_decoder_uninit(&decoder);
-
- return 0;
- }
其中引用的miniaudio头文件见附件。
- Windows
- ------------
- The Windows build should compile cleanly on all popular compilers without the need to configure any include paths nor link to any libraries.
-
- Linux
- ----------
- The Linux build only requires linking to `-ldl`, `-lpthread` and `-lm`. You do not need any development packages.
windows上直接编译。linux下需要依赖-ldl, -lpthread and -lm,即:
gcc main.c -o out -ldl -lpthread -lm
1.windows中播放正常
2.ubuntu上播放正常(x86)
3.树莓派中播放正常(arm32v7)
4.中标麒麟v7服务版播放正常(x86)
5.银河麒麟v10服务版播放正常(arm)
6.centos7播放正常(x86)
1.按指定次数播放暂未找到方法。
2.每次新来语音,正在播放的语音将会停止。
demo下载地址:(qt编译的小demo)