private async Task HandleMetadataAsync(CancellationToken cancelToken) { if (!shoutcastStream.serverSettings.RequestSongMetdata) { return; } cancelToken.ThrowIfCancellationRequested(); if (metadataPos == shoutcastStream.metadataInt) { metadataPos = 0; await socket.LoadAsync(1); if (socket.UnconsumedBufferLength > 0) { uint metaInt = await socket.ReadByteAsync(); if (metaInt > 0) { try { uint metaDataInfo = metaInt * 16; cancelToken.ThrowIfCancellationRequested(); await socket.LoadAsync((uint)metaDataInfo); var metadata = await socket.ReadStringAsync((uint)metaDataInfo); ParseSongMetadata(metadata); } catch (Exception e) { throw new Exception("Error occurred while parsing metadata.", e); //if (e is System.ArgumentOutOfRangeException || e is NullReferenceException) //{ // //No mapping for the Unicode character exists in the target multi-byte code page. // shoutcastStream.MediaStreamSource.MusicProperties.Title = "Unknown Song"; // shoutcastStream.MediaStreamSource.MusicProperties.Artist = "Unknown Artist"; // shoutcastStream.RaiseMetadataChangedEvent(new ShoutcastMediaSourceStreamMetadataChangedEventArgs() // { // Title = "Unknown Song", // Artist = "Unknown Artist" // }); //} } } cancelToken.ThrowIfCancellationRequested(); //byteOffset = 0; } } }