/QtAV

A media playback framework based on Qt and FFmpeg. High performance. User & developer friendly. 基于Qt和FFmpeg的高性能音视频播放框架

Primary LanguageC++

QtAV is a multimedia playback library based on Qt and FFmpeg. It can help you to write a player with less effort than ever before.

QtAV has been added to FFmpeg projects page http://ffmpeg.org/projects.html

QtAV is free software licensed under the term of LGPL v2.1. The player example is licensed under GPL v3. If you use QtAV or its constituent libraries, you must adhere to the terms of the license in question.

Features

QtAV can meet your most demands

  • Hardware decoding suppprt: DXVA2, VAAPI, VDA, CedarX, CUDA(the 1st player support CUDA on linux?)
  • OpenGL and ES2 support for Hi10P and other 16-bit YUV videos (The 1st player/library support in ES2? VLC, XBMC, mplayer does not support now)
  • Video capture in rgb and yuv format
  • OSD and custom filters
  • Filters in libavfilter, for example stero3d, blur
  • Subtitle supports ass, srt etc. Dynamic change FFmpeg and libass engine
  • Playing frame by frame (currently support forward playing)
  • Playback speed control. At any speed.
  • Variant streams: locale file, http, rtsp, etc.
  • Choose audio channel
  • Choose media stream, e.g. play a desired audio track
  • Renderers: QPainter(QWidget, QGraphicsItem), GDI+, Direct2D, XV and OpenGL(and ES2).
  • Dynamically change render engine when playing.
  • Multiple video outputs for 1 player
  • Region of interest(ROI), i.e. video cropping
  • Video eq(software and OpenGL): brightness, contrast, saturation, hue
  • QML support. Most playback APIs are compatible with QtMultiMedia module
  • Compatiblity: QtAV can be built with both Qt4 and Qt5. QtAV supports both FFmpeg(>=1.0) and Libav (>=9.0). Latest FFmpeg release is recommended.

Extensible Framework

Some components in QtAV are designed to be extensible. For example, you can write your decoder, audio output for particular platform. Here is a very good example to add cedar hardware accelerated decoder for A13-OLinuXino

For Developers

Requirements

Qt FFmpeg OpenAL Libav PortAudio

Latest FFmpeg, Qt5 and OpenAL releases are preferred.

The required development files for MinGW can be found in sourceforge page: depends

Build

See the wiki Build QtAV and QtAV Build Configurations

How To Write a Player

Wrtie a media player using QtAV is quite easy.

GLWidgetRenderer2 renderer;
renderer.show();
AVPlayer player;
player.setRenderer(&renderer);
player.play("test.avi");

For more detail to using QtAV, see the wiki Use QtAV In Your Project or examples.

QtAV can also be used in Qml

import QtQuick 2.0
import QtAV 1.4
Item {
    VideoOutput {
        anchors.fill: parent
        source: player
    }
    AVPlayer { //or MediaPlayer
        id: player
        source: "test.mp4"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: player.play()
    }
}

How To Contribute

  • Fork QtAV project on github and make a branch. Commit in that branch, and push, then create a pull request to be reviewed and merged.
  • Create an issue if you have any problem when using QtAV or you find a bug, etc.
  • What you can do: translation, write document, wiki, find or fix bugs, give your idea for this project etc.

Contributors

For End Users

Player Usage

An simple player can be found in examples. The command line options is

player [-ao null] [-vo qt|gl|d2d|gdi|xv] [-vd "dxva[cuda[;vaapi[;vda[;ffmpeg]]]]"] [--no-ffmpeg-log] [url|path|pipe:]

To disable audio output, add -ao null

Choose a render engine with -vo option(default is OpenGL). For example, in windows that support Direct2D, you can run

player -vo d2d filename

To select decoder, use -vd option. Value can be dxva, vaapi and ffmpeg, or a list separated by ; in priority order. For example:

player -vd "dxva;ffmpeg" filename

will use dxva if dxva can decode, otherwise ffmpeg will be used.

Default Shortcuts

  • Double click: fullscreen switch
  • Ctrl+O: open a file
  • Space: pause/continue
  • F: fullscreen on/off
  • T: stays on top on/off
  • N: show next frame. Continue the playing by pressing "Space"
  • O: OSD
  • P: replay
  • Q/ESC: quit
  • S: stop
  • A: switch aspect ratio
  • R: rotate 90
  • M: mute on/off
  • Up / Down: volume + / -
  • Ctrl+Up/Down: speed + / -
  • -> / <-: seek forward / backward
  • Crtl+Wheel: zoom in/out
  • Drag and drop a media file to player

Screenshots

Use QtAV in QML with OpenGL shaders(example is from qtmultimedia. But qtmultimedia is replaced by QtAV)

Alt text

Alt text

QMLPlayer

Video Wall

Alt text


Donate 资助

PayPal Paypal Support via Gittip Gittip Gittip AliPay


Copyright © Wang Bin wbsecg1@gmail.com

Shanghai University->S3 Graphics->Deepin, Shanghai, China

2013-01-21