C++ 使用ffmpeg+SDL播放音视频文件(续)

1、包含必须的头文件。

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

2、示例。

int main()
{
    // 初始化SDL
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        std::cerr << "无法初始化SDL" << std::endl;
        return -1;
    }

    // 创建窗口
    SDL_Window* window = SDL_CreateWindow("Camera Player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                                          640, 480, SDL_WINDOW_SHOWN);
    if (!window) {
        std::cerr << "无法创建窗口" << std::endl;
        return -1;
    }

    // 创建渲染器
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
    if (!renderer) {
        std::cerr << "无法创建渲染器" << std::endl;
        return -1;
    }

    // 初始化libVLC
    libvlc_instance_t* vlcInstance = libvlc_new(0, NULL);

    // 设置要播放的摄像机URL
    const char* cameraUrl = "rtsp://your-camera-url";
    libvlc_media_player_t* mediaPlayer = NULL;
    libvlc_media_t* media = libvlc_media_new_location(vlcInstance, cameraUrl);

    if (media) {
        // 创建媒体播放器
        mediaPlayer = libvlc_media_player_new_from_media(media);

        if (mediaPlayer) {
            // 将视频输出到指定窗口
            libvlc_media_player_set_nsobject(mediaPlayer, SDL_GetWindowID(window));
            libvlc_media_player_play(mediaPlayer);

            // 播放视频直到收到退出信号
            bool quit = false;
            while (!quit) {
                SDL_Event event;
                while (SDL_PollEvent(&event)) {
                    if (event.type == SDL_QUIT) {
                        quit = true;
                        break;
                    }
                }
                SDL_Delay(10);
            }

            // 释放媒体播放器资源
            libvlc_media_player_stop(mediaPlayer);
            libvlc_media_player_release(mediaPlayer);
        }

        // 释放媒体资源
        libvlc_media_release(media);
    }

    // 释放libVLC实例
    libvlc_release(vlcInstance);

    // 释放SDL相关资源
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值