ESPHome
2026.6.0-dev
Loading...
Searching...
No Matches
esphome
components
media_player
media_player.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
esphome/core/entity_base.h
"
4
#include "
esphome/core/helpers.h
"
5
6
namespace
esphome::media_player
{
7
8
enum
MediaPlayerEntityFeature
:
uint32_t
{
9
PAUSE
= 1 << 0,
10
SEEK
= 1 << 1,
11
VOLUME_SET
= 1 << 2,
12
VOLUME_MUTE
= 1 << 3,
13
PREVIOUS_TRACK
= 1 << 4,
14
NEXT_TRACK
= 1 << 5,
15
16
TURN_ON
= 1 << 7,
17
TURN_OFF
= 1 << 8,
18
PLAY_MEDIA
= 1 << 9,
19
VOLUME_STEP
= 1 << 10,
20
SELECT_SOURCE
= 1 << 11,
21
STOP
= 1 << 12,
22
CLEAR_PLAYLIST
= 1 << 13,
23
PLAY
= 1 << 14,
24
SHUFFLE_SET
= 1 << 15,
25
SELECT_SOUND_MODE
= 1 << 16,
26
BROWSE_MEDIA
= 1 << 17,
27
REPEAT_SET
= 1 << 18,
28
GROUPING
= 1 << 19,
29
MEDIA_ANNOUNCE
= 1 << 20,
30
MEDIA_ENQUEUE
= 1 << 21,
31
SEARCH_MEDIA
= 1 << 22,
32
};
33
34
enum
MediaPlayerState
: uint8_t {
35
MEDIA_PLAYER_STATE_NONE
= 0,
36
MEDIA_PLAYER_STATE_IDLE
= 1,
37
MEDIA_PLAYER_STATE_PLAYING
= 2,
38
MEDIA_PLAYER_STATE_PAUSED
= 3,
39
MEDIA_PLAYER_STATE_ANNOUNCING
= 4,
40
MEDIA_PLAYER_STATE_OFF
= 5,
41
MEDIA_PLAYER_STATE_ON
= 6,
42
};
43
const
char
*
media_player_state_to_string
(
MediaPlayerState
state
);
44
45
enum
MediaPlayerCommand
: uint8_t {
46
MEDIA_PLAYER_COMMAND_PLAY
= 0,
47
MEDIA_PLAYER_COMMAND_PAUSE
= 1,
48
MEDIA_PLAYER_COMMAND_STOP
= 2,
49
MEDIA_PLAYER_COMMAND_MUTE
= 3,
50
MEDIA_PLAYER_COMMAND_UNMUTE
= 4,
51
MEDIA_PLAYER_COMMAND_TOGGLE
= 5,
52
MEDIA_PLAYER_COMMAND_VOLUME_UP
= 6,
53
MEDIA_PLAYER_COMMAND_VOLUME_DOWN
= 7,
54
MEDIA_PLAYER_COMMAND_ENQUEUE
= 8,
55
MEDIA_PLAYER_COMMAND_REPEAT_ONE
= 9,
56
MEDIA_PLAYER_COMMAND_REPEAT_OFF
= 10,
57
MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST
= 11,
58
MEDIA_PLAYER_COMMAND_TURN_ON
= 12,
59
MEDIA_PLAYER_COMMAND_TURN_OFF
= 13,
60
MEDIA_PLAYER_COMMAND_NEXT
= 14,
61
MEDIA_PLAYER_COMMAND_PREVIOUS
= 15,
62
MEDIA_PLAYER_COMMAND_REPEAT_ALL
= 16,
63
MEDIA_PLAYER_COMMAND_SHUFFLE
= 17,
64
MEDIA_PLAYER_COMMAND_UNSHUFFLE
= 18,
65
MEDIA_PLAYER_COMMAND_GROUP_JOIN
= 19,
66
};
67
const
char
*
media_player_command_to_string
(
MediaPlayerCommand
command);
68
69
enum class
MediaPlayerFormatPurpose
: uint8_t {
70
PURPOSE_DEFAULT
= 0,
71
PURPOSE_ANNOUNCEMENT
= 1,
72
};
73
74
struct
MediaPlayerSupportedFormat
{
75
std::string
format
;
76
uint32_t
sample_rate
;
77
uint32_t
num_channels
;
78
MediaPlayerFormatPurpose
purpose
;
79
uint32_t
sample_bytes
;
80
};
81
82
// Base features always reported for all media players
83
static
constexpr
uint32_t
BASE_MEDIA_PLAYER_FEATURES =
84
MediaPlayerEntityFeature::PLAY_MEDIA
|
MediaPlayerEntityFeature::BROWSE_MEDIA
|
MediaPlayerEntityFeature::STOP
|
85
MediaPlayerEntityFeature::VOLUME_SET
|
MediaPlayerEntityFeature::VOLUME_MUTE
|
86
MediaPlayerEntityFeature::MEDIA_ANNOUNCE
;
87
88
class
MediaPlayer
;
89
90
class
MediaPlayerTraits
{
91
public
:
92
MediaPlayerTraits
() =
default
;
93
94
uint32_t
get_feature_flags
()
const
{
return
this->
feature_flags_
; }
95
void
add_feature_flags
(
uint32_t
feature_flags) { this->
feature_flags_
|= feature_flags; }
96
void
clear_feature_flags
(
uint32_t
feature_flags) { this->
feature_flags_
&= ~feature_flags; }
97
// Returns true only if all specified flags are set
98
bool
has_feature_flags
(
uint32_t
feature_flags)
const
{
99
return
(this->
feature_flags_
& feature_flags) == feature_flags;
100
}
101
102
std::vector<MediaPlayerSupportedFormat> &
get_supported_formats
() {
return
this->
supported_formats_
; }
103
104
// Legacy setters/getters are kept for backward compatibility
105
void
set_supports_pause
(
bool
supports_pause);
106
bool
get_supports_pause
()
const
{
return
this->
has_feature_flags
(
MediaPlayerEntityFeature::PAUSE
); }
107
108
void
set_supports_turn_off_on
(
bool
supports_turn_off_on);
109
bool
get_supports_turn_off_on
()
const
{
110
return
this->
has_feature_flags
(
MediaPlayerEntityFeature::TURN_ON
|
MediaPlayerEntityFeature::TURN_OFF
);
111
}
112
113
protected
:
114
std::vector<MediaPlayerSupportedFormat>
supported_formats_
{};
115
uint32_t
feature_flags_
{BASE_MEDIA_PLAYER_FEATURES};
116
};
117
118
class
MediaPlayerCall
{
119
public
:
120
MediaPlayerCall
(
MediaPlayer
*parent) :
parent_
(parent) {}
121
122
MediaPlayerCall
&
set_command
(
MediaPlayerCommand
command);
123
MediaPlayerCall
&
set_command
(optional<MediaPlayerCommand> command);
124
MediaPlayerCall
&
set_command
(
const
char
*command);
125
MediaPlayerCall
&
set_command
(
const
std::string &command) {
return
this->
set_command
(command.c_str()); }
126
127
MediaPlayerCall
&
set_media_url
(
const
std::string &url);
128
129
MediaPlayerCall
&
set_volume
(
float
volume);
130
MediaPlayerCall
&
set_announcement
(
bool
announce);
131
132
void
perform
();
133
134
const
optional<MediaPlayerCommand> &
get_command
()
const
{
return
this->
command_
; }
135
const
optional<std::string> &
get_media_url
()
const
{
return
this->
media_url_
; }
136
const
optional<float> &
get_volume
()
const
{
return
this->
volume_
; }
137
const
optional<bool> &
get_announcement
()
const
{
return
this->
announcement_
; }
138
139
protected
:
140
void
validate_
();
141
MediaPlayer
*
const
parent_
;
142
optional<MediaPlayerCommand>
command_
;
143
optional<std::string>
media_url_
;
144
optional<float>
volume_
;
145
optional<bool>
announcement_
;
146
};
147
148
class
MediaPlayer
:
public
EntityBase
{
149
public
:
150
MediaPlayerState
state
{
MEDIA_PLAYER_STATE_NONE
};
151
float
volume
{1.0f};
152
153
MediaPlayerCall
make_call
() {
return
MediaPlayerCall
(
this
); }
154
155
void
publish_state
();
156
157
template
<
typename
F>
void
add_on_state_callback
(F &&callback) {
158
this->
state_callback_
.add(std::forward<F>(callback));
159
}
160
161
virtual
bool
is_muted
()
const
{
return
false
; }
162
163
virtual
MediaPlayerTraits
get_traits
() = 0;
164
165
protected
:
166
friend
MediaPlayerCall
;
167
168
virtual
void
control
(
const
MediaPlayerCall
&call) = 0;
169
170
LazyCallbackManager
<void(
MediaPlayerState
)>
state_callback_
{};
171
};
172
173
}
// namespace esphome::media_player
esphome::EntityBase
Definition
entity_base.h:68
esphome::LazyCallbackManager
Definition
helpers.h:1772
esphome::media_player::MediaPlayerCall
Definition
media_player.h:118
esphome::media_player::MediaPlayerCall::get_announcement
const optional< bool > & get_announcement() const
Definition
media_player.h:137
esphome::media_player::MediaPlayerCall::set_media_url
MediaPlayerCall & set_media_url(const std::string &url)
Definition
media_player.cpp:185
esphome::media_player::MediaPlayerCall::validate_
void validate_()
Definition
media_player.cpp:95
esphome::media_player::MediaPlayerCall::set_volume
MediaPlayerCall & set_volume(float volume)
Definition
media_player.cpp:190
esphome::media_player::MediaPlayerCall::get_media_url
const optional< std::string > & get_media_url() const
Definition
media_player.h:135
esphome::media_player::MediaPlayerCall::get_command
const optional< MediaPlayerCommand > & get_command() const
Definition
media_player.h:134
esphome::media_player::MediaPlayerCall::set_command
MediaPlayerCall & set_command(const std::string &command)
Definition
media_player.h:125
esphome::media_player::MediaPlayerCall::announcement_
optional< bool > announcement_
Definition
media_player.h:145
esphome::media_player::MediaPlayerCall::perform
void perform()
Definition
media_player.cpp:111
esphome::media_player::MediaPlayerCall::volume_
optional< float > volume_
Definition
media_player.h:144
esphome::media_player::MediaPlayerCall::get_volume
const optional< float > & get_volume() const
Definition
media_player.h:136
esphome::media_player::MediaPlayerCall::MediaPlayerCall
MediaPlayerCall(MediaPlayer *parent)
Definition
media_player.h:120
esphome::media_player::MediaPlayerCall::media_url_
optional< std::string > media_url_
Definition
media_player.h:143
esphome::media_player::MediaPlayerCall::parent_
MediaPlayer *const parent_
Definition
media_player.h:141
esphome::media_player::MediaPlayerCall::set_announcement
MediaPlayerCall & set_announcement(bool announce)
Definition
media_player.cpp:195
esphome::media_player::MediaPlayerCall::set_command
MediaPlayerCall & set_command(MediaPlayerCommand command)
Definition
media_player.cpp:130
esphome::media_player::MediaPlayerCall::command_
optional< MediaPlayerCommand > command_
Definition
media_player.h:142
esphome::media_player::MediaPlayer
Definition
media_player.h:148
esphome::media_player::MediaPlayer::control
virtual void control(const MediaPlayerCall &call)=0
esphome::media_player::MediaPlayer::state
MediaPlayerState state
Definition
media_player.h:150
esphome::media_player::MediaPlayer::add_on_state_callback
void add_on_state_callback(F &&callback)
Definition
media_player.h:157
esphome::media_player::MediaPlayer::MediaPlayerCall
friend MediaPlayerCall
Definition
media_player.h:166
esphome::media_player::MediaPlayer::publish_state
void publish_state()
Definition
media_player.cpp:200
esphome::media_player::MediaPlayer::get_traits
virtual MediaPlayerTraits get_traits()=0
esphome::media_player::MediaPlayer::volume
float volume
Definition
media_player.h:151
esphome::media_player::MediaPlayer::make_call
MediaPlayerCall make_call()
Definition
media_player.h:153
esphome::media_player::MediaPlayer::is_muted
virtual bool is_muted() const
Definition
media_player.h:161
esphome::media_player::MediaPlayer::state_callback_
LazyCallbackManager< void(MediaPlayerState)> state_callback_
Definition
media_player.h:170
esphome::media_player::MediaPlayerTraits
Definition
media_player.h:90
esphome::media_player::MediaPlayerTraits::MediaPlayerTraits
MediaPlayerTraits()=default
esphome::media_player::MediaPlayerTraits::get_supports_pause
bool get_supports_pause() const
Definition
media_player.h:106
esphome::media_player::MediaPlayerTraits::supported_formats_
std::vector< MediaPlayerSupportedFormat > supported_formats_
Definition
media_player.h:114
esphome::media_player::MediaPlayerTraits::get_supports_turn_off_on
bool get_supports_turn_off_on() const
Definition
media_player.h:109
esphome::media_player::MediaPlayerTraits::set_supports_turn_off_on
void set_supports_turn_off_on(bool supports_turn_off_on)
Definition
media_player.cpp:87
esphome::media_player::MediaPlayerTraits::clear_feature_flags
void clear_feature_flags(uint32_t feature_flags)
Definition
media_player.h:96
esphome::media_player::MediaPlayerTraits::has_feature_flags
bool has_feature_flags(uint32_t feature_flags) const
Definition
media_player.h:98
esphome::media_player::MediaPlayerTraits::feature_flags_
uint32_t feature_flags_
Definition
media_player.h:115
esphome::media_player::MediaPlayerTraits::get_feature_flags
uint32_t get_feature_flags() const
Definition
media_player.h:94
esphome::media_player::MediaPlayerTraits::get_supported_formats
std::vector< MediaPlayerSupportedFormat > & get_supported_formats()
Definition
media_player.h:102
esphome::media_player::MediaPlayerTraits::set_supports_pause
void set_supports_pause(bool supports_pause)
Definition
media_player.cpp:79
esphome::media_player::MediaPlayerTraits::add_feature_flags
void add_feature_flags(uint32_t feature_flags)
Definition
media_player.h:95
entity_base.h
state
bool state
Definition
fan.h:2
helpers.h
esphome::media_player
Definition
automation.h:6
esphome::media_player::MediaPlayerFormatPurpose
MediaPlayerFormatPurpose
Definition
media_player.h:69
esphome::media_player::MediaPlayerFormatPurpose::PURPOSE_ANNOUNCEMENT
@ PURPOSE_ANNOUNCEMENT
esphome::media_player::MediaPlayerFormatPurpose::PURPOSE_DEFAULT
@ PURPOSE_DEFAULT
esphome::media_player::MediaPlayerEntityFeature
MediaPlayerEntityFeature
Definition
media_player.h:8
esphome::media_player::VOLUME_STEP
@ VOLUME_STEP
Definition
media_player.h:19
esphome::media_player::PAUSE
@ PAUSE
Definition
media_player.h:9
esphome::media_player::MEDIA_ANNOUNCE
@ MEDIA_ANNOUNCE
Definition
media_player.h:29
esphome::media_player::BROWSE_MEDIA
@ BROWSE_MEDIA
Definition
media_player.h:26
esphome::media_player::MEDIA_ENQUEUE
@ MEDIA_ENQUEUE
Definition
media_player.h:30
esphome::media_player::GROUPING
@ GROUPING
Definition
media_player.h:28
esphome::media_player::VOLUME_SET
@ VOLUME_SET
Definition
media_player.h:11
esphome::media_player::STOP
@ STOP
Definition
media_player.h:21
esphome::media_player::PREVIOUS_TRACK
@ PREVIOUS_TRACK
Definition
media_player.h:13
esphome::media_player::SEARCH_MEDIA
@ SEARCH_MEDIA
Definition
media_player.h:31
esphome::media_player::TURN_ON
@ TURN_ON
Definition
media_player.h:16
esphome::media_player::SHUFFLE_SET
@ SHUFFLE_SET
Definition
media_player.h:24
esphome::media_player::NEXT_TRACK
@ NEXT_TRACK
Definition
media_player.h:14
esphome::media_player::SELECT_SOUND_MODE
@ SELECT_SOUND_MODE
Definition
media_player.h:25
esphome::media_player::CLEAR_PLAYLIST
@ CLEAR_PLAYLIST
Definition
media_player.h:22
esphome::media_player::TURN_OFF
@ TURN_OFF
Definition
media_player.h:17
esphome::media_player::SELECT_SOURCE
@ SELECT_SOURCE
Definition
media_player.h:20
esphome::media_player::PLAY
@ PLAY
Definition
media_player.h:23
esphome::media_player::PLAY_MEDIA
@ PLAY_MEDIA
Definition
media_player.h:18
esphome::media_player::VOLUME_MUTE
@ VOLUME_MUTE
Definition
media_player.h:12
esphome::media_player::REPEAT_SET
@ REPEAT_SET
Definition
media_player.h:27
esphome::media_player::SEEK
@ SEEK
Definition
media_player.h:10
esphome::media_player::media_player_command_to_string
const char * media_player_command_to_string(MediaPlayerCommand command)
Definition
media_player.cpp:32
esphome::media_player::media_player_state_to_string
const char * media_player_state_to_string(MediaPlayerState state)
Definition
media_player.cpp:11
esphome::media_player::MediaPlayerState
MediaPlayerState
Definition
media_player.h:34
esphome::media_player::MEDIA_PLAYER_STATE_ON
@ MEDIA_PLAYER_STATE_ON
Definition
media_player.h:41
esphome::media_player::MEDIA_PLAYER_STATE_IDLE
@ MEDIA_PLAYER_STATE_IDLE
Definition
media_player.h:36
esphome::media_player::MEDIA_PLAYER_STATE_PLAYING
@ MEDIA_PLAYER_STATE_PLAYING
Definition
media_player.h:37
esphome::media_player::MEDIA_PLAYER_STATE_OFF
@ MEDIA_PLAYER_STATE_OFF
Definition
media_player.h:40
esphome::media_player::MEDIA_PLAYER_STATE_PAUSED
@ MEDIA_PLAYER_STATE_PAUSED
Definition
media_player.h:38
esphome::media_player::MEDIA_PLAYER_STATE_NONE
@ MEDIA_PLAYER_STATE_NONE
Definition
media_player.h:35
esphome::media_player::MEDIA_PLAYER_STATE_ANNOUNCING
@ MEDIA_PLAYER_STATE_ANNOUNCING
Definition
media_player.h:39
esphome::media_player::MediaPlayerCommand
MediaPlayerCommand
Definition
media_player.h:45
esphome::media_player::MEDIA_PLAYER_COMMAND_PAUSE
@ MEDIA_PLAYER_COMMAND_PAUSE
Definition
media_player.h:47
esphome::media_player::MEDIA_PLAYER_COMMAND_SHUFFLE
@ MEDIA_PLAYER_COMMAND_SHUFFLE
Definition
media_player.h:63
esphome::media_player::MEDIA_PLAYER_COMMAND_PREVIOUS
@ MEDIA_PLAYER_COMMAND_PREVIOUS
Definition
media_player.h:61
esphome::media_player::MEDIA_PLAYER_COMMAND_ENQUEUE
@ MEDIA_PLAYER_COMMAND_ENQUEUE
Definition
media_player.h:54
esphome::media_player::MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST
@ MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST
Definition
media_player.h:57
esphome::media_player::MEDIA_PLAYER_COMMAND_PLAY
@ MEDIA_PLAYER_COMMAND_PLAY
Definition
media_player.h:46
esphome::media_player::MEDIA_PLAYER_COMMAND_STOP
@ MEDIA_PLAYER_COMMAND_STOP
Definition
media_player.h:48
esphome::media_player::MEDIA_PLAYER_COMMAND_TOGGLE
@ MEDIA_PLAYER_COMMAND_TOGGLE
Definition
media_player.h:51
esphome::media_player::MEDIA_PLAYER_COMMAND_GROUP_JOIN
@ MEDIA_PLAYER_COMMAND_GROUP_JOIN
Definition
media_player.h:65
esphome::media_player::MEDIA_PLAYER_COMMAND_REPEAT_ALL
@ MEDIA_PLAYER_COMMAND_REPEAT_ALL
Definition
media_player.h:62
esphome::media_player::MEDIA_PLAYER_COMMAND_VOLUME_UP
@ MEDIA_PLAYER_COMMAND_VOLUME_UP
Definition
media_player.h:52
esphome::media_player::MEDIA_PLAYER_COMMAND_VOLUME_DOWN
@ MEDIA_PLAYER_COMMAND_VOLUME_DOWN
Definition
media_player.h:53
esphome::media_player::MEDIA_PLAYER_COMMAND_TURN_OFF
@ MEDIA_PLAYER_COMMAND_TURN_OFF
Definition
media_player.h:59
esphome::media_player::MEDIA_PLAYER_COMMAND_REPEAT_OFF
@ MEDIA_PLAYER_COMMAND_REPEAT_OFF
Definition
media_player.h:56
esphome::media_player::MEDIA_PLAYER_COMMAND_UNSHUFFLE
@ MEDIA_PLAYER_COMMAND_UNSHUFFLE
Definition
media_player.h:64
esphome::media_player::MEDIA_PLAYER_COMMAND_MUTE
@ MEDIA_PLAYER_COMMAND_MUTE
Definition
media_player.h:49
esphome::media_player::MEDIA_PLAYER_COMMAND_UNMUTE
@ MEDIA_PLAYER_COMMAND_UNMUTE
Definition
media_player.h:50
esphome::media_player::MEDIA_PLAYER_COMMAND_REPEAT_ONE
@ MEDIA_PLAYER_COMMAND_REPEAT_ONE
Definition
media_player.h:55
esphome::media_player::MEDIA_PLAYER_COMMAND_TURN_ON
@ MEDIA_PLAYER_COMMAND_TURN_ON
Definition
media_player.h:58
esphome::media_player::MEDIA_PLAYER_COMMAND_NEXT
@ MEDIA_PLAYER_COMMAND_NEXT
Definition
media_player.h:60
uint32_t
static void uint32_t
Definition
crash_handler.cpp:141
esphome::media_player::MediaPlayerSupportedFormat
Definition
media_player.h:74
esphome::media_player::MediaPlayerSupportedFormat::num_channels
uint32_t num_channels
Definition
media_player.h:77
esphome::media_player::MediaPlayerSupportedFormat::sample_rate
uint32_t sample_rate
Definition
media_player.h:76
esphome::media_player::MediaPlayerSupportedFormat::format
std::string format
Definition
media_player.h:75
esphome::media_player::MediaPlayerSupportedFormat::purpose
MediaPlayerFormatPurpose purpose
Definition
media_player.h:78
esphome::media_player::MediaPlayerSupportedFormat::sample_bytes
uint32_t sample_bytes
Definition
media_player.h:79
Generated by
1.12.0