Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
 
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
#1

Прослушать mp3 по ссылке - C# MVC

26.09.2017, 08:21. Просмотров 636. Ответов 43
Метки нет (Все метки)

Доброго времени суток, коллеги! Какой самый лучший способ прослушать mp3 при нажатии на ссылку (не скачивать)?

MP3 файлы хранятся в файловой шаре (\\virtualMachine\Records\111.mp3).
Вставить напрямую в тег не получится, файл не будет воспроизводиться:
HTML5
1
<audio src='file:\\virtualMachine\Records\111.mp3' autoplay controls controlsList='nodownload'></audio>
Предполагаю при клике на ссылку "Прослушать запись" отправлять запрос Home/GetRecord(Guid Id), в этом методе копировать запись в wwwroot/Record и возвращать на клиент src до файла.

Здесь возникло пара вопросов.
1. Как скопировать файл из шары в wwroot?
Думаю что то подобное нужно использовать
C#
1
 using (var fileStream = new FileStream(Path.Combine(callsFolder, fileName), FileMode.Create))
, но гугл упорно показывает примеры с UploadFiles(IFormFile file) - не то что нужно
2.Можно ли в
HTML5
1
<audio></audio>
передавать сразу поток, без копирования файла в wwwroot/Record? Если да то не будет ли этот вариант дольше по времени работать?
PS: Спасибо за отзывчивость

Добавлено через 2 минуты
Было бы удобно считать файл в массив байтов, либо поток и передать клиенту, но как скормить тегу <audio> byte[] или streem?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2017, 08:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Прослушать mp3 по ссылке (C# MVC):

Необходимость запустить по ссылке MediaPlayer для воспроизведения MP3 с моего сайта
Я только учусь создавать WEB страницы и у меня возникла необходимость запустить...

Как воспроизвести MP3 файл по ссылке?
Здравствуйте! Имеется ссылка на mp3 файл &quot;http://sait.ru/file.mp3&quot;. Нужно...

Как сделать чтобы файл mp3 загружался по ссылке
Не могу понять как сделать чтобы списком передавались url на файлы типо ...

Winmm.dll. Воспроизведение mp3 файлов по прямой ссылке из интернета
Всем хай. Задача: воспроизводить mp3 файлы по прямой ссылке из интернета....

Пропали эскизы папок с mp3 файлами, отсутствуют теги в mp3 файлах
Доброго времени суток, появилась такая проблема: пропали эскизы папок с mp3...

Как определить длительность Mp3 файла. MP3 плеер на библиотеке BASS 2.4
В процессе поиска ответов я наткнулся на эту тему...

43
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
26.09.2017, 09:52 #2
Alex_trader, в src нужно вставлять нормальный URL ведущий на ваше веб-приложение. А метод действия, на который этот URL будет указывать, уже должен лезть за файлом куда надо (раз файл не в wwwroot лежит) и выдавать браузеру в виде stream. Соответственно, в урле должен быть идентификатор файла, чтобы контроллер знал за каким именно файлом нужно лезть.

Добавлено через 8 минут
И ещё один важный момент: браузер не полезет по URL ведущему в локальные ресурсы машины\сети со страницы полученной от веб-сервера (вопрос безопасности).
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 12:06  [ТС] #3
Usaga, делаю так, но проигрывание аудио не начинается, не подскажете что не так?
C#
1
2
3
4
5
6
7
8
9
10
11
public async Task<IActionResult> GetCallRecord(Guid commutationId)
        {
            if (commutationId == Guid.Empty) return this.BadRequest();
          
            byte[] bytes = await this.WebApiInvoke("CallRegistry/GetCallRecord", "GET", new Dictionary<string, object>{
            {
                "commutationId", commutationId
            }});
            MemoryStream ms = new MemoryStream(bytes);
            return this.File(ms, "audio/mpeg");
        }
Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 public byte[] GetCallRecord(Guid commutationId)
        {
            try
            {
                var folder = "//share/RecordedFiles/";
                var fileName = "111.mp3";
 
                var filePath = folder + fileName;
                var fileExists = System.IO.File.Exists(filePath);
 
                if (fileExists)
                {
                    return File.ReadAllBytes(filePath);
                }
                else
                {
                    return new byte[0];
                }
            }
            catch (Exception e)
            {
                return new byte[0];
            }
        }
0
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
26.09.2017, 12:07 #4
Alex_trader, смотрите в инструментах разработчика, что с сервера возвращается. Смотрите в отладчике, что на сервере происходит. Не вчера же C#-ом занялись.
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 12:07  [ТС] #5
Байты приходят, не пустые, но аудио не воспроизводится
0
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
26.09.2017, 12:10 #6
Это что за ерунда такая?

C#
1
2
3
4
            catch (Exception e)
            {
                return new byte[0];
            }
Добавлено через 1 минуту
Alex_trader, теги оформляете как положено, по инструкции?
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 12:34  [ТС] #7
Прослушать mp3 по ссылке
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 12:35  [ТС] #8
Usaga, ответ пришёл норм, тип медиа, как понять причину по которой не воспроизводится звук?
0
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
26.09.2017, 12:39 #9
Alex_trader, сложно сказать.

Попробуйте воспроизвести файл на локальной странице. Без веб-серверов. Простейшую страничку сделайте и рядом с ней mp3 нужный бросьте. Начните с этого.
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 12:46  [ТС] #10
HTML5
1
<audio id="15402ba4-74b2-435e-b10d-8bd338299b39" src="CallRegistry/GetCallRecord?commutationId=15402ba4-74b2-435e-b10d-8bd338299b39" autoplay="" controls="" controlslist="nodownload"></audio>
тег в браузере выглядит так
0
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
26.09.2017, 12:48 #11
Alex_trader, а если так сделать:

HTML5
1
<audio id="15402ba4-74b2-435e-b10d-8bd338299b39" src="CallRegistry/GetCallRecord?commutationId=15402ba4-74b2-435e-b10d-8bd338299b39" autoplay="autoplay" controls="controls"></audio>
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 12:51  [ТС] #12
Кинул файлик 1.mp3 в папку wwwroot, так всё работатет
HTML5
1
<audio src="1.mp3" autoplay="" controls="" controlslist="nodownload"></audio>
0
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
26.09.2017, 12:53 #13
Alex_trader, сравните заголовки рабочего ответа и ответа от вашего веб-приложения. Сравните размеры данных, сравните содержимое ответов (байтов).
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 13:49  [ТС] #14
Usaga,
Цитата Сообщение от Usaga Посмотреть сообщение
Сравните размеры данных, сравните содержимое ответов (байтов)
Структура проекта: WebIF -> WebApi -> WebApi(File.ReadAllBytes(filePath))
Ответ: WebIF(byte[107642]) -> WebApi(byte[80729]) -> WebApi(byte[60480])

Добавлено через 1 минуту
Usaga, Подскажите, почему по мере прохождения сервисов, массив байтов увеличивается?
0
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
26.09.2017, 13:58 #15
Alex_trader, потому, что где-то баг. Ставьте точки останова, изучайте логику работы, смотрите содержимое массива.
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 15:10  [ТС] #16
Usaga, отсюда вопрос, как передавать файл между сервисами?
0
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
26.09.2017, 17:05 #17
Alex_trader, так же как и из веб-приложения.

Но один вопрос: файлы на той же машине, что и веб-приложение?
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.09.2017, 07:30  [ТС] #18
Цитата Сообщение от Usaga Посмотреть сообщение
Но один вопрос: файлы на той же машине, что и веб-приложение?
Оконечное WebApi читающее файл на той же машине
0
Usaga
Эксперт .NET
3730 / 3022 / 549
Регистрация: 21.01.2016
Сообщений: 11,995
Завершенные тесты: 2
27.09.2017, 07:47 #19
Alex_trader, читайте файл из самого веб-приложения. Или организуйте над хранилищем с файлами отдельное веб-приложение (если надо). Вообще, совершенно не обязательно на каждый чих делать по WebAPI.
0
Alex_trader
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.09.2017, 07:54  [ТС] #20
Usaga, Спасибо за помощь! Разобрался
Читаю так файл
C#
1
2
3
4
5
6
  var result = new HttpResponseMessage(HttpStatusCode.OK);
                var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                result.Content = new StreamContent(stream);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("audio/mpeg");
 
                return result;
потом передаю его между сервисами как HttpResponseMessage
и возвращаю на клиент
C#
1
2
3
 var response = this.WebApiInvoke("CallRegistry/GetCallRecord", "GET", new Dictionary<string, object>{{"commutationId", commutationId}});
            var stream = await response.Content.ReadAsStreamAsync();
            return this.File(stream, "audio/mpeg");
Может кому пригодится
0
27.09.2017, 07:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2017, 07:54
Привет! Вот еще темы с решениями:

Как поставить в Mp3 плеере на кнопку окрытие не одного mp3 файла ??
Привет ! У меня такая проблема я пишу mp3 плеер на Delphi и у меня в нём есть...

[Решено]STM32F4 + Helix mp3 не кодирует некоторые mp3
Вдохновлённый топиком в сообществе от товарища MykiSmith. На stm32f4Dyscovery...

Прослушать ExpandableListView
Здраствуйте, у меня есть код прослушки, он работает! но мне нужно вытянуть...

Прослушать запись в файл
Доброе утро! Стоит задача записи некоторых атрибутов в CAD файл (UG) без ее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru