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

Прослушать mp3 по ссылке

26.09.2017, 08:21. Просмотров 1299. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2017, 08:21
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 8 минут
И ещё один важный момент: браузер не полезет по URL ведущему в локальные ресурсы машины\сети со страницы полученной от веб-сервера (вопрос безопасности).
0
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
Эксперт .NET
8251 / 5632 / 953
Регистрация: 21.01.2016
Сообщений: 21,466
26.09.2017, 12:07 4
Alex_trader, смотрите в инструментах разработчика, что с сервера возвращается. Смотрите в отладчике, что на сервере происходит. Не вчера же C#-ом занялись.
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 12:07  [ТС] 5
Байты приходят, не пустые, но аудио не воспроизводится
0
Эксперт .NET
8251 / 5632 / 953
Регистрация: 21.01.2016
Сообщений: 21,466
26.09.2017, 12:10 6
Это что за ерунда такая?

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

Попробуйте воспроизвести файл на локальной странице. Без веб-серверов. Простейшую страничку сделайте и рядом с ней mp3 нужный бросьте. Начните с этого.
0
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
Эксперт .NET
8251 / 5632 / 953
Регистрация: 21.01.2016
Сообщений: 21,466
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
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
Эксперт .NET
8251 / 5632 / 953
Регистрация: 21.01.2016
Сообщений: 21,466
26.09.2017, 12:53 13
Alex_trader, сравните заголовки рабочего ответа и ответа от вашего веб-приложения. Сравните размеры данных, сравните содержимое ответов (байтов).
0
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
Эксперт .NET
8251 / 5632 / 953
Регистрация: 21.01.2016
Сообщений: 21,466
26.09.2017, 13:58 15
Alex_trader, потому, что где-то баг. Ставьте точки останова, изучайте логику работы, смотрите содержимое массива.
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.09.2017, 15:10  [ТС] 16
Usaga, отсюда вопрос, как передавать файл между сервисами?
0
Эксперт .NET
8251 / 5632 / 953
Регистрация: 21.01.2016
Сообщений: 21,466
26.09.2017, 17:05 17
Alex_trader, так же как и из веб-приложения.

Но один вопрос: файлы на той же машине, что и веб-приложение?
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.09.2017, 07:30  [ТС] 18
Цитата Сообщение от Usaga Посмотреть сообщение
Но один вопрос: файлы на той же машине, что и веб-приложение?
Оконечное WebApi читающее файл на той же машине
0
Эксперт .NET
8251 / 5632 / 953
Регистрация: 21.01.2016
Сообщений: 21,466
27.09.2017, 07:47 19
Alex_trader, читайте файл из самого веб-приложения. Или организуйте над хранилищем с файлами отдельное веб-приложение (если надо). Вообще, совершенно не обязательно на каждый чих делать по WebAPI.
0
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2017, 07:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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