A thread-safe, mid-level Haskell wrapper around libmpv.
A very spartan media player in 18 lines, using Codec.MPV.Simple:
module Main where
import Codec.MPV.Simple
import Control.Concurrent (MVar, newEmptyMVar, putMVar, takeMVar)
import System.Environment (getArgs)
main :: IO ()
main = do
files <- getArgs
fileDone <- newEmptyMVar
mpv <- simpleMPV simpleSettings { eventHandler = handleEOF fileDone }
mapM_ (playFile mpv fileDone) files
handleEOF :: MVar () -> MPV -> MPVEvent -> IO ()
handleEOF fileDone mpv (EndFileEvent _) = putMVar fileDone ()
handleEOF fileDone mpv _ = return ()
playFile :: MPV -> MVar () -> FilePath -> IO ()
playFile mpv fileDone file = loadFile mpv file >> takeMVar fileDoneFor more control over rendering, window management, and the MPV event loop,
use Codec.MPV instead.
- Did you create an OpenGL rendering context and set it as the current context
(
glMakeCurrent)? - Are you calling
renderFramein response toRenderEvents? - Are you properly presenting your rendering buffer after calling
renderFrame(glSwapBuffers)?