C++ 使用vlc+SDL播放音视频文件

1、包含必须的头文件。

#include <vlc/vlc.h>
#include <SDL2/SDL.h>

 2、示例。

int main() {
    // 初始化SDL
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        SDL_Log("无法初始化SDL: %s", SDL_GetError());
        return -1;
    }

    // 创建窗口和渲染器
    SDL_Window* window = SDL_CreateWindow("Camera Player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                                          640, 480, SDL_WINDOW_SHOWN);
    if (!window) {
        SDL_Log("无法创建窗口: %s", SDL_GetError());
        return -1;
    }

    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if (!renderer) {
        SDL_Log("无法创建渲染器: %s", SDL_GetError());
        return -1;
    }

    // 创建libVLC实例
    libvlc_instance_t* vlcInstance = libvlc_new(0, NULL);
    if (!vlcInstance) {
        SDL_Log("无法创建libVLC实例");
        return -1;
    }

    // 设置视频输出回调函数
    libvlc_video_set_callbacks(vlcInstance, NULL, NULL, NULL, NULL);

    // 创建媒体播放器
    libvlc_media_player_t* mediaPlayer = libvlc_media_player_new(vlcInstance);
    if (!mediaPlayer) {
        SDL_Log("无法创建媒体播放器");
        return -1;
    }

    // 指定要播放的视频地址
    const char* url = "rtsp://your_camera_url";
    libvlc_media_t* media = libvlc_media_new_location(vlcInstance, url);
    libvlc_media_player_set_media(mediaPlayer, media);

    // 将视频输出到SDL的渲染器
    libvlc_media_player_set_nsobject(mediaPlayer, (void*)renderer);

    // 开始播放
    libvlc_media_release(media);
    libvlc_media_player_play(mediaPlayer);

    // 进入主循环
    SDL_Event event;
    bool quit = false;
    while (!quit) {
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                quit = true;
            }
        }
        
        // 清空并更新渲染器
        SDL_RenderClear(renderer);
        SDL_RenderPresent(renderer);
    }

    // 释放资源
    libvlc_media_player_stop(mediaPlayer);
    libvlc_media_player_release(mediaPlayer);
    libvlc_release(vlcInstance);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值