在 C++ 中使用 VLC 播放 YouTube 视频遇到困难

问题描述 投票:0回答:1

我需要在 C++ 中创建一个使用 VLC 播放 YouTube 视频的函数。 当我播放视频时,没有任何反应,没有窗口打开,视频没有播放,也没有出现错误。 (我确信我正确下载了 VLC 和库,并将它们正确连接到我的项目,因为我创建了一个播放本地视频(下载到计算机的视频)的函数,并且运行良好)。 非常感谢。

这是我的代码:

#include <iostream>
#include <vlc/vlc.h>

static void handleVLCEvents(const libvlc_event_t* event, void* userData) {
    switch (event->type) {
    case libvlc_MediaPlayerEndReached:
        std::cout << "End of video reached." << std::endl;
        break;
    default:
        break; 
    } 
}

int playVideo() {
    libvlc_instance_t* vlcInstance = libvlc_new(0, nullptr);
    libvlc_media_player_t* vlcMediaPlayer = libvlc_media_player_new(vlcInstance);
    libvlc_event_manager_t* vlcEventManager = libvlc_media_player_event_manager(vlcMediaPlayer); 
    libvlc_event_attach(vlcEventManager, libvlc_MediaPlayerEndReached, handleVLCEvents, nullptr);

    // Open a YouTube video
    std::string youtubeURL = "https://www.youtube.com/watch?v=BZP1rYjoBgI";
    libvlc_media_t* vlcMedia = libvlc_media_new_location(vlcInstance, youtubeURL.c_str());
    libvlc_media_player_set_media(vlcMediaPlayer, vlcMedia);
    libvlc_media_release(vlcMedia);

    // Play the video
    libvlc_media_player_play(vlcMediaPlayer);

    // Keep the program running to display the video
    std::cin.get();

    // Clean up
    libvlc_media_player_stop(vlcMediaPlayer);
    libvlc_media_player_release(vlcMediaPlayer);
    libvlc_release(vlcInstance);

    return 0;
}
c++ vlc libvlc
1个回答
0
投票

您已经差不多完成了,但是播放 YouTube 视频(或 m3u 播放列表)只需要几行代码。

您现在向 LibVLC 提供的是 YouTube 视频的 HTML 页面,而不是 YouTube 托管的视频文件的直接 URL。

为此,您需要解析媒体并播放其子项目(它指向实际的 URL,由 VLC 的 lua 脚本解码)。以下是伪代码中缺少的函数。

libvlc_media_parse_with_options(vlcMedia, libvlc_media_parse_network, -1);
libvlc_media_subitems(vlcMedia);
libvlc_media_player_set_media(vlcMediaPlayer, vlcMediaSubItem);
© www.soinside.com 2019 - 2024. All rights reserved.