c++ - 如何使用 libvlc 仅播放视频文件的音频?
问题描述
我想只播放视频文件的音频libvlc
。我怎么能做到?
这是我的代码:
#include <vlc/vlc.h>
#include <chrono>
#include <iostream>
#include <string>
#include <thread>
#include <vector>
int main()
{
libvlc_instance_t *inst = libvlc_new(0, nullptr);
char const *location = "mario_00.webm";
libvlc_media_t *vlc_media = libvlc_media_new_path(inst, location);
libvlc_media_player_t *vlc_player = libvlc_media_player_new_from_media(vlc_media);
libvlc_media_player_play(vlc_player); //this line will play the video and audio
while(1){
if(libvlc_media_get_state(vlc_media) == libvlc_Ended){
break;
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
libvlc_media_player_release(vlc_player);
libvlc_media_release(vlc_media);
libvlc_release(inst);
}
解决方案
您可以--no-video
使用libvlc_new()参数指定选项。
它的声明是
libvlc_instance_t* libvlc_new( int argc, const char *const *argv )
所以,它会是这样的:
const char* argv[] = { "--no-video" };
libvlc_instance_t *inst = libvlc_new( 1, argv );
如该线程中所述,另一个选项是 option --vout none
。有了这个,代码将是:
const char* argv[] = { "--vout", "none" };
libvlc_instance_t *inst = libvlc_new( 2, argv );
但是,在播放媒体(音频)时,您会收到类似这样的连续错误流:
[00007f8da808b7f0] main video output error: video output creation failed
[00007f8dc741e930] main decoder error: failed to create video output
[00007f8da80d2250] main video output error: video output creation failed
[00007f8dc741e930] main decoder error: failed to create video output
[00007f8da80d2250] main video output error: video output creation failed
[00007f8dc741e930] main decoder error: failed to create video output
[h264 @ 0x7f8dc74422e0] get_buffer() failed
[h264 @ 0x7f8dc74422e0] thread_get_buffer() failed
[h264 @ 0x7f8dc74422e0] decode_slice_header error
[h264 @ 0x7f8dc74422e0] no frame!
[00007f8da4045f80] main video output error: video output creation failed
[00007f8dc741e930] main decoder error: failed to create video output
[h264 @ 0x7f8dc7453f60] get_buffer() failed
[h264 @ 0x7f8dc7453f60] thread_get_buffer() failed
[h264 @ 0x7f8dc7453f60] decode_slice_header error
[h264 @ 0x7f8dc7453f60] no frame!
[00007f8d9c045f80] main video output error: video output creation failed
[00007f8dc741e930] main decoder error: failed to create video output
[h264 @ 0x7f8dc7499c40] get_buffer() failed
[h264 @ 0x7f8dc7499c40] thread_get_buffer() failed
[h264 @ 0x7f8dc7499c40] decode_slice_header error
[h264 @ 0x7f8dc7499c40] no frame!
同样也可以使用libvlc_media_player_set_nsobject()来实现,如下所示:
libvlc_media_player_set_nsobject( vlc_player, nullptr );
在这种情况下,您不必通过argc
and argv
to libvlc_new()
。
推荐阅读
- javascript - 新会员注册时自动生成 HTML 页面
- c# - 从 UserControls 更新视图
- c# - 如何选择重复的项目
- node.js - 用于迁移的 TypeOrm 树解决方案
- excel - 如何参考 OLE 工作簿?
- hibernate - 在 JPA/Hibernate 中使用 @OnetoMany 的实体中不存在时从数据库中删除子记录(Spring 引导应用程序)
- c# - C#。Aspose.Words 将带有页码的二维码添加到页脚
- autofixture - 可以组合 Autofixture 自定义(通过 NUnit3 属性)吗?如果可以,如何组合?
- python - 在 Windows 10 Pro 上运行远程 = False 时出现 GEKKO 错误
- assembly - 为什么 MOV CR0 和 JMP 指令必须来自在切换到保护模式时进行身份映射的页面?