refactor player to use shared queue code