13 audio_init(void *cls
, int bits
, int channels
, int samplerate
)
15 return fopen("audio.pcm", "wb");
19 audio_set_volume(void *cls
, void *session
, float volume
)
21 printf("Setting volume to %f\n", volume
);
25 audio_set_metadata(void *cls
, void *session
, const void *buffer
, int buflen
)
28 FILE *file
= fopen("metadata.bin", "wb");
30 buflen
-= fwrite(buffer
+orig
-buflen
, 1, buflen
, file
);
33 printf("Metadata of length %d saved as metadata.bin\n", orig
);
37 audio_set_coverart(void *cls
, void *session
, const void *buffer
, int buflen
)
40 FILE *file
= fopen("coverart.jpg", "wb");
42 buflen
-= fwrite(buffer
+orig
-buflen
, 1, buflen
, file
);
45 printf("Coverart of length %d saved as coverart.jpg\n", orig
);
49 audio_process(void *cls
, void *session
, const void *buffer
, int buflen
)
53 buflen
-= fwrite(buffer
+orig
-buflen
, 1, buflen
, session
);
58 audio_flush(void *cls
, void *session
)
60 printf("Flushing audio\n");
64 audio_destroy(void *cls
, void *session
)
70 main(int argc
, char *argv
[])
72 const char *name
= "AppleTV";
73 unsigned short raop_port
= 5000;
74 const char hwaddr
[] = { 0x48, 0x5d, 0x60, 0x7c, 0xee, 0x22 };
78 raop_callbacks_t raop_cbs
;
81 raop_cbs
.audio_init
= audio_init
;
82 raop_cbs
.audio_set_volume
= audio_set_volume
;
83 raop_cbs
.audio_set_metadata
= audio_set_metadata
;
84 raop_cbs
.audio_set_coverart
= audio_set_coverart
;
85 raop_cbs
.audio_process
= audio_process
;
86 raop_cbs
.audio_flush
= audio_flush
;
87 raop_cbs
.audio_destroy
= audio_destroy
;
89 raop
= raop_init_from_keyfile(&raop_cbs
, "airport.key");
90 raop_start(raop
, &raop_port
, hwaddr
, sizeof(hwaddr
), "test");
92 dnssd
= dnssd_init(NULL
);
93 dnssd_register_raop(dnssd
, name
, raop_port
, hwaddr
, sizeof(hwaddr
), 1);
101 dnssd_unregister_raop(dnssd
);
102 dnssd_destroy(dnssd
);