Audio- und Videoprojekt – Audio- und Video-Player-Analyse basierend auf FFmpeg und SDL (19)

einführen

In dieser Serie werde ich viel Zeit damit verbringen, den Audio- und Videoplayer meines Gitee-Projekts zu erklären. In diesem Projekt können Sie Kenntnisse im Zusammenhang mit der Entkapselung, Dekodierung und SDL-Wiedergabe von Audio und Video erlernen. Wenn Sie sich für den Quellcode interessieren, schauen Sie sich bitte den auf FFmpeg und SDL basierenden Audio- und Videoplayer an

Wenn Sie diesen Artikel nicht verstehen, können Sie auf meinen vorherigen Artikel „Audio- und Videoprojekt – Audio- und Video-Player-Analyse basierend auf FFmpeg und SDL“ (18) verweisen.

analysieren

Im Anschluss an das oben Gesagte analysieren wir weiterhin die Funktion der Videoausgabe

Schauen wir uns zunächst den Konstruktor an

VideoOutput::VideoOutput(AVSync* avsync, AVRational time_base, AVFrameQueue* frame_queue, int video_width, int video_height){
    this->avsync = avsync;
    this->time_base = time_base;
    this->frame_queue = frame_queue;
    this->video_width = video_width;
    this->video_height = video_height;
}

Dies ist leichter zu verstehen, da es sich um die Zuweisung einiger privater Mitgliedsvariablen handelt

Init-Funktion
int VideoOutput::Init(){
    if(SDL_Init(SDL_INIT_VIDEO)){
        return -1;
    }
    win = SDL_CreateWindow("player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, video_width, video_height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    if(!win){
        return -1;
    }

    renderer = SDL_CreateRenderer(win, -1, 0);
    if(!renderer){
        return -1;
    }

    texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, video_width, video_height);
    if(!texture){
        return -1;
    }

    yuv_buf_size = video_width * video_height * 1.5;
    yuv_buf = new uint8_t[yuv_buf_size];
}

SDL_Init initialisiert das Videogerät

SDL_CreateWindow erstellt ein Fenster, gefolgt von Parametern, die hier nicht im Detail besprochen werden.

SDL_CreateRenderer erstellt einen Renderer und die nachfolgenden Parameter werden nicht im Detail besprochen.

SDL_CreateTexture erstellt eine Textur

Weisen Sie dann die Länge des YUV-Arrays dem 1,5-fachen zu. Dies basiert auf dem YUV420-Prinzip. In diesem Artikel wird nicht auf Details eingegangen.

Erstellen Sie abschließend das yuv-Array

Okay, das war's für heute. Nachfolgend werden die folgenden Funktionen analysiert.

Wenn Sie wissen möchten, was als nächstes passiert ist, hören Sie sich das nächste Mal bitte die Aufschlüsselung an.

おすすめ

転載: blog.csdn.net/weixin_60701731/article/details/134563044