ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
media_player.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace esphome::media_player {
7
9 PAUSE = 1 << 0,
10 SEEK = 1 << 1,
11 VOLUME_SET = 1 << 2,
12 VOLUME_MUTE = 1 << 3,
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,
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
44
68
69enum class MediaPlayerFormatPurpose : uint8_t {
72};
73
81
82// Base features always reported for all media players
83static constexpr uint32_t BASE_MEDIA_PLAYER_FEATURES =
87
88class MediaPlayer;
89
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);
107
108 void set_supports_turn_off_on(bool supports_turn_off_on);
112
113 protected:
114 std::vector<MediaPlayerSupportedFormat> supported_formats_{};
115 uint32_t feature_flags_{BASE_MEDIA_PLAYER_FEATURES};
116};
117
119 public:
120 MediaPlayerCall(MediaPlayer *parent) : parent_(parent) {}
121
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_();
142 optional<MediaPlayerCommand> command_;
143 optional<std::string> media_url_;
144 optional<float> volume_;
145 optional<bool> announcement_;
146};
147
148class MediaPlayer : public EntityBase {
149 public:
151 float volume{1.0f};
152
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
164
165 protected:
167
168 virtual void control(const MediaPlayerCall &call) = 0;
169
171};
172
173} // namespace esphome::media_player
const optional< bool > & get_announcement() const
MediaPlayerCall & set_media_url(const std::string &url)
MediaPlayerCall & set_volume(float volume)
const optional< std::string > & get_media_url() const
const optional< MediaPlayerCommand > & get_command() const
MediaPlayerCall & set_command(const std::string &command)
const optional< float > & get_volume() const
MediaPlayerCall & set_announcement(bool announce)
MediaPlayerCall & set_command(MediaPlayerCommand command)
optional< MediaPlayerCommand > command_
virtual void control(const MediaPlayerCall &call)=0
void add_on_state_callback(F &&callback)
virtual MediaPlayerTraits get_traits()=0
LazyCallbackManager< void(MediaPlayerState)> state_callback_
std::vector< MediaPlayerSupportedFormat > supported_formats_
void set_supports_turn_off_on(bool supports_turn_off_on)
void clear_feature_flags(uint32_t feature_flags)
bool has_feature_flags(uint32_t feature_flags) const
std::vector< MediaPlayerSupportedFormat > & get_supported_formats()
void set_supports_pause(bool supports_pause)
void add_feature_flags(uint32_t feature_flags)
bool state
Definition fan.h:2
const char * media_player_command_to_string(MediaPlayerCommand command)
const char * media_player_state_to_string(MediaPlayerState state)
static void uint32_t