$30 off During Our Annual Pro Sale. View Details »

Cross Platform Video Player

Cross Platform Video Player

Shumpei Urabe
PRO

September 09, 2020
Tweet

More Decks by Shumpei Urabe

Other Decks in Programming

Transcript

  1. $SPTT1MBUGPSN7JEFP1MBZFS
    4FQUFNCFSUI
    /"9" --$"MM3JHIUT3FTFSWFE

    View Slide

  2. 4IVNQFJ63"#&
    /"9" --$$&0

    View Slide

  3. $SPTTQMBUGPSN

    View Slide

  4. J04 "OESPJE NBD04 8JOEPXT

    View Slide

  5. UseCase
    • Play Video from File
    • Get Raw Video Buffer

    View Slide

  6. Supported Codecs
    iOS macOS
    Android Windows
    H.264 H.264 H.264 H.264
    H.265 H.265 H.265 H.265
    VP8 VP8
    VP9 VP9

    View Slide

  7. View Slide

  8. Supported Codecs
    iOS macOS
    Android Windows
    H.264 H.264 H.264 H.264
    H.265 H.265 H.265 H.265
    VP8 VP8
    VP9 VP9

    View Slide

  9. View Slide

  10. Supported Codecs
    iOS macOS
    Android Windows
    H.264 H.264 H.264 H.264
    H.265 H.265 H.265 H.265
    VP8 VP8
    VP9 VP9

    View Slide

  11. 8IBUEPZPVBDUVBMMZEP

    View Slide

  12. 6TF044UBOEBSE"1*

    View Slide

  13. iOS / macOS
    1. AVPlayer(AVFoundation)
    2. VTDecompressionSession to MTKView

    View Slide

  14. iOS / macOS
    1. AVPlayer(AVFoundation)
    2. VTDecompressionSession to MTKView

    View Slide

  15. iOS / macOS
    VTDecompressionSession
    CVMetalTexture
    MTKView
    CVMetalTextureCache
    MTLTexture

    View Slide

  16. Android
    1. ExoPlayer (Google OSS)
    2. MediaCodec to SurfaceView

    View Slide

  17. Android
    1. ExoPlayer (Google OSS)
    2. MediaCodec to SurfaceView

    View Slide

  18. Android
    MediaExtractor
    MediaCodec
    SurfaceView

    View Slide

  19. Windows
    1. MediaFoundation.MediaEngine
    2. MediaFoundation.MFCreateVideoRenderer

    View Slide

  20. Windows
    1. MediaFoundation.MediaEngine
    2. MediaFoundation.MFCreateVideoRenderer

    View Slide

  21. Windows
    Set up Video sink (Enhanced Video Renderer)
    Set up Video source.
    Create a media type and set on the source and sink.
    Set up event handler for sink events.
    Srart the sample loop.

    View Slide

  22. View Slide

  23. WMDPSNQW

    View Slide

  24. mpv

    View Slide

  25. mpv
    • Famous as a video player.
    • Backend is ffmpeg.
    • There is a libmpv that can be used as a library.

    View Slide

  26. libmpv
    • embedded into other programs as video/audio
    playback backend.
    • Compared to other libraries, it is very simple to
    use.

    View Slide

  27. libmpv
    1. Embed Native Window
    (Windows / X11)
    2. Rendering API
    (OpenGL)

    View Slide

  28. Basic Usage
    mpv_handle *ctx = mpv_create();
    mpv_initialize(ctx);
    const char *cmd[] = {"loadfile", filename, NULL};
    mpv_command(ctx, cmd);

    View Slide

  29. OpenGL

    View Slide

  30. Native Window Renderer (Windows)
    _mpvHandle = _mpvCreate.Invoke();
    _mpvInitialize.Invoke(_mpvHandle);
    _mpvSetOption(_mpvHandle, GetUtf8Bytes("wid"),
    mpvFormatInt64, ref windowId);
    DoMpvCommand("loadfile", filename);

    View Slide

  31. Tips
    • If you use libmpv, you can't handle the raw
    buffer.
    • mpv iOS build is pretty hard to do.

    View Slide

  32. Tips
    You can use libvlc to get a buffer on callback.

    View Slide

  33. &/%

    View Slide