返回

c++-在SDL 2.0.4(Theora)中播放视频

发布时间:2022-06-15 19:47:12 373
# golang

我正在使用:UBUNTU 14.04 + SDL 2.0.4 + Code::Blocks 13.12 - ( C++ ) - 链接到libtheora.a (v.1.1.1)

目标:能够在 SDL2 应用程序中播放(解码) Ogg Theora 视频。

我可以使用 ffmpeg 库。但是存在许可证问题,因为它们使用 MPEG……等等……

所以,我从http://www.theora.org选择了 Ogg Theora 库,因为它是“无专利的”。

(他们有一个简单且非常宽松的许可证,没有使用“专有”编解码器)。

我一直在网上搜索一个非常简单的 C++ SDL2 + Ogg Theora 视频播放示例,在我的情况下,无需解码音频,只需视频,然后发送到 SDL2(可能是纹理?...)。但我找不到任何相关的东西。我发现只有一些“凌乱”的代码,即使这样,它也不起作用。

任何人都可以分享代码片段(任何解决方案/任何提示/其他想法)?...

到目前为止我的代码......

(在这个测试中,我正在使用“theoraplay.h”——https://icculus.org/theoraplay——此时)

// My project linkage:
-lSDL2
-lSDL2_image
-lSDL2_mixer
-logg
-lvorbis
-lvorbisenc
-lvorbisfile
-ltheora
-ltheoraenc
-ltheoradec

// SDL2:
#include 
#include 
#include 

// OGG Library: (The multimedia wrapper)
#include "ogg/ogg.h"

// VORBIS Library: (Audio)
#include "vorbis/codec.h"
#include "vorbis/vorbisenc.h"
#include "vorbis/vorbisfile.h"

// THEORA Library: (Video)
#include "theora/theora.h"
#include "theora/theoraenc.h"
#include "theora/theoradec.h"    

// The "framework" for Ogg Theora video play, from: https://icculus.org/theoraplay      
// I'm Testing it... 
#include "theoraplay.h"


// SDL2 - Objects:
SDL_Surface* surface;
SDL_Texture* texture;
SDL_Rect rectangle;

// THEORAPLAY - Objects:
THEORAPLAY_Decoder* decoder = NULL; // Will return a Link error... Why?...
const THEORAPLAY_VideoFrame* video = NULL;  // No issues (Links and runs ok)
const THEORAPLAY_AudioPacket* audio = NULL; // No issues (Links and runs ok)




int main(int args, char* argv[]){

   // (SDL2 code to create the window, renderer, events, etc, goes here...) 

   surface = IMG_Load("images/example.png"); // Load an image.       
   texture = SDL_CreateTextureFromSurface(renderer, temp); // Pass the image into a texture.

   // "ERROR" - LOG says: undefined reference to "THEORAPLAY_startDecodeFile"...
   decoder = THEORAPLAY_startDecodeFile("bunny.ogg", 20, THEORAPLAY_VIDFMT_YV12);
   // "bunny.ogg" - Ogg video from: https://peach.blender.org/download

   // SDL2: Here, will be added the code to pass THEORA frames into a SDL2 streaming texture...

   while(!quit){

      // Render everything:
      SDL_RenderCopy(renderer, texture, NULL, &rectangle);

   };

};
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像