Developers can pass arbitrary callbacks into the Player to add custom error states and better handle expected & unexpected failure states