Hello. Having a hard time with this one.
The Apple Media Service is documented here (1). It seems like an elegant and simply system to control audio over BLE with a custom hardware solution.
I have set up various boards I have, including Arduino Nano BLE and Adafruit Huzzah ESP32, using fairly straightforward scripts.
This "device" I am building then should show up on the iPhone > Settings App > Bluetooth > Other Devices. I should able to connect to the device, and have it get media information from the iPhone and be able to control it
What happens is a bit odd. First nothing shows up in Other Devices. I then use a BLE integrator app like BLE Scanner, and it shows up as Arduino (despite what I name it). I can connect to it, and interesting it lists APPLE MEDIA as a service UUID (which is correct!).
Now if I go back to Settings App > Bluetooth, because I have connected to my device with BLE Scanner, it shows as connected and under "My Devices" ! However it doesn't work, no audio is controlled. As a test I tried flicking the Play Pause characteristic but it does nothing (can see it in the Arduino code below where it flips every 4 second).
Is there an example of using Apple Media Device BLE control? I found one using MicroPython but I don't want to use micropython, and I am not sure what I am doing different.
The Arduino code is here. I have been trying to get this to work for a while now, using many, many different boards / chips. Any help is appreciated:
BLEService mediaService("89D3502B-0F36-433A-8EF4-C502AD55F8DC");
BLEUnsignedCharCharacteristic audioControlChar("9B3C81D8-57B1-4A8A-B8DF-0E56F7CA51C2", BLEWrite | BLENotify);
BLEUnsignedCharCharacteristic entityUpdateChar("2F7CABCE-808D-411F-9A0C-BB92BA96C102", BLEWrite | BLENotify);
BLEUnsignedCharCharacteristic entityAttributeChar("C6B2F38C-23AB-46D8-A6AB-A3A870BBD5D7", BLEWrite | BLERead);
int playPauseSwitch = 1; // for now flip between 0 (pause) and play (1) on 9B3C81D8 characteristic, every 4 seconds
long previousMillis = 0; // count for test to flip play pause
void setup() {
Serial.begin(9600);
while (!Serial);
pinMode(LED_BUILTIN, OUTPUT);
// begin initialization
if (!BLE.begin()) {
Serial.println("starting BLE failed!");
while (1);
}
BLE.setLocalName("MediaController");
mediaService.addCharacteristic(audioControlChar);
mediaService.addCharacteristic(entityUpdateChar);
mediaService.addCharacteristic(entityAttributeChar);
BLE.setAdvertisedService(mediaService); // add the service UUID
BLE.addService(mediaService);
BLE.advertise();
Serial.println("Bluetooth device active, waiting for connections...");
}
void loop() {
// wait for a BLE central
BLEDevice central = BLE.central();
// if a central is connected to the peripheral:
if (central) {
Serial.print("Connected to central: ");
// print the central's BT address:
Serial.println(central.address());
// turn on the LED to indicate the connection:
digitalWrite(LED_BUILTIN, HIGH);
while (central.connected()) {
long currentMillis = millis();
// For now flip play pause characteristics every 4 seconds
if (currentMillis - previousMillis >= 4000) {
previousMillis = currentMillis;
flipPlayPause();
}
}
// when the central disconnects, turn off the LED:
digitalWrite(LED_BUILTIN, LOW);
Serial.print("Disconnected from central: ");
Serial.println(central.address());
}
}
void flipPlayPause() {
if (playPauseSwitch == 0) {
playPauseSwitch = 1;
} else {
playPauseSwitch = 0;
}
audioControlChar.writeValue(playPauseSwitch);
}
(1) -
Apple BLE Media Service https://developer.apple.com/library/archive/documentation/CoreBluetooth/Reference/AppleMediaService_Reference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40014716-CH2-SW1
Post
Replies
Boosts
Views
Activity
Hello,
I am building a project that embeds a normal mp4 video with sound. The video plays fine in Mac OS. I then embed into my project. As soon as I launch the project, even if its just showing SwiftUI view, it completely messes up the sound coming out of my Mac - everything then sounds like it has static. I have to restart my Mac to get the sound back to normal.
This is with Xcode 13.1
Hello!
SwiftUI canvas looks great for my needs. I tried it out by using the Canvas with Gesture sample code in the "WWDC21 What's New in SwiftUI" session, 22 minutes in. I am running it on Xcode 13.0 Beta on M1 MacBook Air with Big Sur, on the iPad Pro 11 iOS 15 simulator
I maybe get 2 or 3 frames a second, not even close to what is being shown in the video
What am I missing? thx
PS. It's virtually impossible to copy sample code in the MacOS WWDC Developer app
Unfortunately my new M1 MacBook Air with 16GB when running Xcode 12 constantly hangs. The project is a fairly straightforward SwiftUI project with no 3rd party libraries
It hangs, or freezes. Sometimes the spinner comes up, sometimes not. Sometimes it works for a few minutes, sometimes it hangs bad enough I need to force quit it.
Anyone else experiencing this? I installed it from the Mac App Store. Nothing else is running beside Safari. Nothing seems to be eating the CPU in activity monitor.
Was pretty excited when Swift Playgrounds got the Xcode template. This example doesn't seem to work however. Adding more than one item to a ZStack causes abort errors. There are also visual errors on the Preview
Hello,I can no longer query for user's Movie or TV Shows. This used to work before iOS 9. MPMediaPropertyPredicate *predicate =
[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeMovie] forProperty:MPMediaItemPropertyMediaType];
MPMediaQuery *query = [[MPMediaQuery alloc] init];
[query addFilterPredicate:predicate];
NSArray *items = [query items];Returns nothing. As does MPMediaTypeTVShow.Any hints ? Thanks.