Как преобразовать служебный код WCF в потоковую передачу mp3-файла?
Всем привет,
Недавно я создал музыкальное приложение wcf service c# для прослушивания и загрузки музыкальных треков для потребления данных для фронтального приложения потоковой передачи музыки Android. Все работает хорошо принять производительность ожидания музыкального запроса, чтобы закончить буферизацию всего трека с сервера, чтобы ответить обратно клиенту (Android-приложение).
Ниже приведен мой код, который я в настоящее время использую для восстановления музыкальных mp3-файлов для потоковой передачи. Проблема в том, что mp3 - файлы буферизуются, и я хочу, чтобы они могли транслироваться вместо этого. Может ли кто-нибудь помочь мне показать несколько примеров того, как я буду скрывать метод прокси-сервиса LoadTracksByAlbum(string AlbumID) в потоке. Ваша помощь будет с радостью оценена.
Примечание: свойство TrackUrl, которое является доступом через объект loadTracksbyAlbum, является единственным свойством, относящимся к физическому mp3-файлу. Свойство TrackUrl получает строковый путь из базы данных и ссылается на папку, содержащую mp3-файлы на сервере, которые будут использоваться для потоковой передачи музыки в интерфейсном приложении потоковой передачи музыки Android.
Что я уже пробовал:
Я еще ничего не пробовал программно в c#, но я настроил настройки в файле webconfig на Transfermode = "Streamed", максимальный размер и т. д. Это может в конечном счете позволить мне передавать больше данных, чем разрешенные фиксированные 64 КБ, но это не позволяет мне использовать классы потока, такие как FileStream,BinaryReader и члены, такие как CanSeek, CanRead. У меня нет идеала slightess, как бы я записал этот поток в свою текущую сервисную операцию LoadTracksByAlbum(string AlbumID). Может ли кто-нибудь помочь мне с несколькими примерами? Я очень ценю вашу помощь.
Мой контракт на передачу данных:
[DataMember] public string TrackUrl { get; set; }
Мой контракт на обслуживание:
[OperationContract] [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, Method = "GET", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "LoadTracksByAlbum/{AlbumID}")] List<LoadAlbumTracks> LoadTracksByAlbum(string AlbumID);
Мой метод работы прокси-договор реализации:
public List<LoadAlbumTracks> LoadTracksByAlbum(string AlbumID) { List<LoadAlbumTracks> loadAlbumTracksList1 = new List<LoadAlbumTracks>(); MusicDataContext tapesDataContext = new MusicDataContext(); CultureInfo cultureInfo = CultureInfo.GetCultureInfo("en-US"); tapesDataContext.CommandTimeout = 0; foreach (proc_TracksLoadByAlbumResult loadByAlbumResult in (IEnumerable<proc_TracksLoadByAlbumResult>)tapesDataContext.proc_TracksLoadByAlbum(new int?(Convert.ToInt32(AlbumID)))) { List<LoadAlbumTracks> loadAlbumTracksList2 = loadAlbumTracksList1; LoadAlbumTracks loadAlbumTracks1 = new LoadAlbumTracks(); loadAlbumTracks1.TrackID = loadByAlbumResult.TrackID; loadAlbumTracks1.TrackTitle = loadByAlbumResult.TrackTitle; loadAlbumTracks1.Artists = loadByAlbumResult.Atists; loadAlbumTracks1.DiscJockeyName = loadByAlbumResult.DiscJockeyName; loadAlbumTracks1.TrackDescription = loadByAlbumResult.TrackDescription; loadAlbumTracks1.TrackUrl = loadByAlbumResult.TrackUrl; loadAlbumTracks1.AlbumID = loadByAlbumResult.AlbumID ?? 0; loadAlbumTracks1.AlbumCoverPhotoUrl = loadByAlbumResult.AlbumCoverPhotoUrl; loadAlbumTracks1.AlbumName = loadByAlbumResult.AlbumName; loadAlbumTracks1.TotalStreams = loadByAlbumResult.TotalStreams; LoadAlbumTracks loadAlbumTracks2 = loadAlbumTracks1; loadAlbumTracks1.DownloadStatus = loadByAlbumResult.DownloadStatus; bool? trackStatus = loadByAlbumResult.TrackStatus; int num = trackStatus.HasValue ? (trackStatus.GetValueOrDefault() ? 1 : 0) : 1; loadAlbumTracks2.TrackStatus = num != 0; loadAlbumTracks1.DjID = loadByAlbumResult.DjID ?? 0; loadAlbumTracks1.CreatedBy = loadByAlbumResult.CreatedBy ?? 0; loadAlbumTracks1.CreatedOn = !loadByAlbumResult.CreatedOn.HasValue ? "" : loadByAlbumResult.CreatedOn.Value.ToString("d", (IFormatProvider)cultureInfo); loadAlbumTracks1.UpdatedBy = loadByAlbumResult.UpdatedBy ?? 0; loadAlbumTracks1.UpdatedOn = !loadByAlbumResult.UpdatedOn.HasValue ? "" : loadByAlbumResult.UpdatedOn.Value.ToString("d", (IFormatProvider)cultureInfo); LoadAlbumTracks loadAlbumTracks3 = loadAlbumTracks1; loadAlbumTracksList2.Add(loadAlbumTracks3); } return loadAlbumTracksList1; }