Canlı radyo istasyonları ve stream yönetimi.
Şarkıların yanı sıra canlı radyo yayınlarını da platformunuza ekleyebilirsiniz. Dış kaynaklı radyo akışlarını (TRT FM, Radyo D gibi) veya kendi radyo yayınınızı kullanıcılara sunabilirsiniz.
Kullanıcılar şarkı seçmek yerine bir radyo kanalı açıp bırakabilir. 7/24 müzik akışı, DJ yorumları ve haberler.
Radyo yayınının canlı akış adresi. MP3, AAC veya HLS formatında olabilir.
Radyo istasyonunun logosu. Player'da ve listelerde gösterilir.
Her radyo bir müzik türüne bağlanır. "Jazz Radyoları" gibi gruplama yapılır.
Radyo şu an yayında mı? Sistem bunu otomatik kontrol eder.
Dış radyo yayınları doğrudan kullanıcıya gönderilmez. Sistem araya girer, böylece dinleme istatistikleri toplanır ve yayın kesintileri yönetilir.
Radyo yayını kesilirse player otomatik olarak yeniden bağlanmaya çalışır. Kullanıcı fark etmez bile.
Bazı radyolar şu an çalan şarkı bilgisini paylaşır. Bu bilgi player'da gösterilir.
Kullanıcı bir radyo istasyonuna tıkladığında sistem şu adımları izler:
Radyo kaydındaki stream URL'i alınır. URL formatı kontrol edilir: doğrudan MP3/AAC stream mi, yoksa playlist (.m3u, .pls) mi? Playlist ise içindeki gerçek stream URL'i parse edilir.
Dış radyo stream'i doğrudan kullanıcıya verilmez. Sistem araya girer: /api/radio/stream/{id} şeklinde proxy endpoint oluşturulur. Bu URL player'a gönderilir. Böylece gerçek stream URL'i gizli kalır.
Proxy endpoint çağrıldığında, sunucu dış radyo kaynağına bağlanır ve gelen veriyi aynen kullanıcıya iletir. cURL ile stream açılır, chunk chunk (parça parça) data okunur ve flush edilir. Bu sürekli akan bir bağlantıdır.
Arka planda cron job her 5 dakikada tüm radyoların durumunu kontrol eder. Stream URL'ine HEAD request atılır. 200 OK dönerse "online", hata dönerse "offline" olarak işaretlenir. Offline radyolar listede farklı gösterilir.
Bazı radyolar ICY metadata gönderir. Stream header'larındaki "icy-metaint" değeri okunur. Bu değer kadar byte sonra metadata gelir. "StreamTitle='Sanatçı - Şarkı'" formatında parse edilir ve player'da gösterilir.
Player JavaScript'i bağlantı koptuğunda (error event) otomatik yeniden bağlanmayı dener. Exponential backoff uygulanır: 1sn, 2sn, 4sn, 8sn... Maksimum 5 deneme sonrası kullanıcıya hata mesajı gösterilir.
Proxy üzerinden geçen her bağlantı kayıt altına alınır. Hangi radyo kaç kez dinlendi, ortalama dinleme süresi, en popüler saatler gibi istatistikler toplanır. Bu veriler raporlama için kullanılır.