C++ 在控制台应用程序中播放视频音频
Posted
技术标签:
【中文标题】C++ 在控制台应用程序中播放视频音频【英文标题】:C++ Play video audio in console application 【发布时间】:2014-07-09 11:14:04 【问题描述】:我一直在开发一个 C++ 应用程序,该应用程序根据用户的操作播放不同的视频。到目前为止,我使用 OpenCV 只播放视频,因为我需要实时对视频进行一些更改。由于 OpenCV 不播放声音,我需要使用不同的库来独立播放声音。到目前为止,我尝试了 FFMPEG,但我无法让它工作,因为我没有使用 C++ 的经验(至少在具有外部库的计算机中,我通常在微控制器上对其进行编程)。
声音不需要与视频同步,它也只能在 Windows 上运行。我最好的选择是什么?
谢谢。
【问题讨论】:
opencv 的主要能力是处理帧,而不是 I/O。我会为此使用 Qt + phonon。 qt-project.org/doc/qt-5/multimedia-examples.html 我使用 OpenCV 处理帧,因为我需要实时处理视频。但是,OpenCV 不处理音频,我也需要播放它,就像它在视频中一样。 opencv 可以 I/O 视频作为图像数据——实际上它在较低层使用 ffmpeg——但它的主要能力是处理它们。对于音频,它没有能力。 正如我所说,我实际上只想运行视频的音频,我不想处理它。 【参考方案1】:如果它只需要在 Windows 上工作,WINAPI function PlaySound
应该可以满足您的要求。
#include "windows.h"
#include "mmsystem.h"
void play()
PlaySound(TEXT("sound.wav"), NULL, SND_FILENAME); // plays sound.wav once
要完成这项工作,您需要链接到 winmm.lib
。
如果您的文件名不是 ASCII,您应该改用 PlaySoundA
(ANSI) 或 PlaySoundW
(unicode)。
See also this question如果声音播放不正常。
【讨论】:
我按照你说的做了,但由于某种原因,它播放了“错误”的窗口声音(我一定是做错了什么)。这是代码: PlaySound(TEXT("C:/Users/Ricardo/Documents/Visual Studio 2013/Projects/SomEVideo/SomEVideo/KinectAudio-02-23-32.wav"), NULL, SND_FILENAME); // 播放 sound.wav 一次 我真的帮不了你,因为我不明白它正在播放什么“错误的窗口声音”。您可能应该从中提出一个新问题。 这正是我所做的:首先在 stdafx.h 中包含标头,然后只将这行代码放在 main 函数中进行测试 PlaySound(TEXT("C:/Users/Ricardo/Documents /Visual Studio 2013/Projects/SomEVideo/SomEVideo/KinectAudio-02-23-32.wav"), NULL, SND_FILENAME);。在此之后,我在项目属性中链接了 winmm.lib。当我运行程序时,我不想播放 wav 声音,而是播放这个 wav 声音:dl.dropboxusercontent.com/u/45453297/Windows%20Background.wav @RicardoAlves 来自链接规范:“SND_FILENAME pszSound 参数是一个文件名。如果找不到文件,函数播放默认声音,除非 SND_NODEFAULT 标志是设置。” @RicardoAlves 不是使用反斜杠的窗口吗?路径不应该是:“C:\Users\Ricardo[etc...]\KinectAudio-02-23-32.wav”以上是关于C++ 在控制台应用程序中播放视频音频的主要内容,如果未能解决你的问题,请参考以下文章