Перейти к содержанию
Fire Monkey от А до Я
  • 0

[Android] Воспроизводить аудио


Ingalime

Вопрос

Подскажите, пожалуйста, можно ли воспроизводить аудио поток в FMX, если известен статический адрес и порт -> IP:порт?

Спасибо.

Изменено пользователем Ingalime
Ссылка на комментарий
  • Ответы 82
  • Создана
  • Последний ответ

Лучшие авторы в вопросе

Рекомендуемые сообщения

  • 0
7 часов назад, Slym сказал:

Нет. я свой статический адрес и порт прикрыл фаирволом и другим советую :)
 

А причем тут твой фаервол? Вопрос совсем о другом, о принципиальной возможности  воспроизведения аудиопотока с указаного адреса/порта в FMX

Стандартный TMediaPlayer из FMX полное убожесто, не работает нормально даже в 10.4.1, поэтому про него можно забыть. Если еще кто то в него верит и надеется на чудо.
Теоретически это могут делать FFMPEG VCL (поддерживает и FMX) и Alcinoe

Ссылка на комментарий
  • 0
1 час назад, Tumaso сказал:

А причем тут твой фаервол? Вопрос совсем о другом, о принципиальной возможности  воспроизведения аудиопотока с указаного адреса/порта в FMX

А при том что надо разделять транспорт, кодек и hal...
я без проблем сделаю TCP/HTTP запрос, до что делать с данными? а может там udp? нужен декодер, и управлялка потоком
декодер может и найду, но что делать с PCM данными... нужен компонент вывода звука
вывод может найду...

а если хотите кинуть батон и в продакшон... ищите сами :)

 

Ссылка на комментарий
  • 0

Вроде с BASS получаеться проигрывает нужный мне адрес:

#include "bass.h"

HSAMPLE smp;
HSTREAM str;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 BASS_Init(-1, 44100, BASS_DEVICE_3D, 0, NULL); //Инициализация звукового потока
 str=BASS_StreamCreateURL(PAnsiChar("http://путь к нужной станции"), 0, 0, NULL,0); //Создаем поток str. 
 BASS_ChannelPlay(str, False); //Воспроизвести наше звуковой поток str
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 BASS_ChannelStop(str); //Остановка
 BASS_SampleFree (smp); //Чистим ресурс
}
//---------------------------------------------------------------------------

Пока пробую с Windows, но у BASS и для Андроида есть файлы...

Пока не разобралась как с помощью TrackBar менять громкость.

Ссылка на комментарий
  • 0

В общем для Windows как-то так. Может кому пригодиться:

#include <fmx.h>
#pragma hdrstop

#include "bass.h"
#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;

HSAMPLE smp;
HSTREAM str;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
 TrackBar1->Value = 10;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
 BASS_Init(-1, 44100, BASS_DEVICE_3D, 0, NULL); //Инициализация звукового потока
 str=BASS_StreamCreateURL(PAnsiChar("http://путь"), 0, 0, NULL,0); //Создаем поток str.
 BASS_SetVolume(TrackBar1->Value/100.0);
 BASS_ChannelPlay(str, false); //Воспроизвести наше звуковой поток str

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 BASS_ChannelStop(str); //Остановка
 BASS_SampleFree (smp); //Чистим ресурс
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
  BASS_SetVolume(TrackBar1->Value/100.0);
}
//---------------------------------------------------------------------------

Теперь буду пробовать для Андроида портировать...

Изменено пользователем Ingalime
Ссылка на комментарий
  • 0

Хочу попробовать переписать на Дельфи. Помогите, пожалуйста, исправить bass.pas, чтобы откомпилировать.

[DCC Error] bass.pas(543): E2003 Undeclared identifier: 'PAnsiChar'

  // Device info structure
  BASS_DEVICEINFO = record
    name: PAnsiChar;    // Ошибка
    driver: PAnsiChar;  // driver
    flags: DWORD;
  end;

bass.zip

Ссылка на комментарий
  • 0

Создание приложения для Андроид с использованием BASS.
1. Скачиваем с офф.сайта архивы для Андроид и Windows.
2.
a) Для Дельфи 10.3.3 открываем из архива для Windows файл bass.pas. Вместо AnsiChar пишем Byte, место PAnsiChar пишем MarshaledAString. Это для версии Дельфи 10.3.3.
b) Для С++ Builder 10.3.3 открываем bass.h и комментируем объявление //typedef uint32_t DWORD;
с) Включаем эти файлы в проект uses/include.
3. Добавляем в Deployment проекта файлы SO из папок armeabi/armeabi-v7a/arm64-v8a и указываем в Deployment пути Remote path (library\lib\armeabi-v7a и других).
4. В опциях проекта добавляем в Seach Path путь к папке arm64-v8a.

Ссылка на комментарий
  • 0

Прошу не пинать, это мой первый код на паскале. Не могу понять, как проверить, что str: HSTREAM инициализировалась нормально. Мой if ошибочен: Operator not applicable to this operand type

//function BASS_StreamCreateURL(url: PChar; offset: DWORD; flags: DWORD; proc: DOWNLOADPROC; user: Pointer):HSTREAM;
 str: HSTREAM;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
var
  M: TMarshaller;

begin

 BASS_StreamFree(str);
 str := BASS_StreamCreateURL(M.AsAnsi('http://publicradio.mybb.online').ToPointer, 0, 0, nil, nil);
 if(str = nil) then
  begin
    ShowMessage('Проблема!');
  end;

 BASS_SetVolume(TrackBar1.Value/100.0);
 BASS_ChannelPlay(str, True);
end;

 

Ссылка на комментарий
  • 0

я все равно не понимаю, для чего там ANSI 

url: PChar

значит просто 'xxxxxxx' и все. если не понравится, то pchar('xxxxxxx'), она поймет

ну и раз возвращает HSTREAM это не указатель, а просто число, значит не =NIL а =0

Ссылка на комментарий
  • 0

Во всех трех вариантах вижу ShowMessage. ?

//str := BASS_StreamCreateURL(M.AsAnsi('http://91.199.194.34:8000').ToPointer, 0, 0, nil, nil);
//str := BASS_StreamCreateURL(('http://91.199.194.34:8000'), 0, 0, nil, nil);
  str := BASS_StreamCreateURL(Pchar('http://91.199.194.34:8000'), 0, 0, nil, nil);

 if(str = 0) then
  begin
    ShowMessage('Проблема!');
  end;

 

Ссылка на комментарий
  • 0
18 минут назад, krapotkin сказал:

есть еще предположение, что надо разрешить http на android. По умолчанию только https работает

 

А где эти настройки? Или это в коде надо?

Ссылка на комментарий
  • 0

Простой способ реализовать это-использовать этот атрибут для вашего AndroidManifest.xml , где вы разрешаете все http для всех запросов:

android:usesCleartextTraffic="true"
Ссылка на комментарий
  • 0

А что говорит ErrorCode ?

 

If successful, the new stream's handle is returned, else 0 is returned. Use BASS_ErrorGetCode to get the error code.

 

BASS_ERROR_INIT BASS_Init has not been successfully called.
BASS_ERROR_NOTAVAIL The BASS_STREAM_AUTOFREE flag cannot be combined with the BASS_STREAM_DECODE flag.
BASS_ERROR_NONET No internet connection could be opened. Can be caused by a bad proxy setting.
BASS_ERROR_ILLPARAM url is not a valid URL.
BASS_ERROR_SSL SSL/HTTPS support is not available. See BASS_CONFIG_LIBSSL.
BASS_ERROR_TIMEOUT The server did not respond to the request within the timeout period, as set with the BASS_CONFIG_NET_TIMEOUT config option.
BASS_ERROR_FILEOPEN The file could not be opened.
BASS_ERROR_FILEFORM The file's format is not recognised/supported.
BASS_ERROR_UNSTREAMABLE The file cannot be streamed. This could be because an MP4 file's "mdat" atom comes before its "moov" atom.
BASS_ERROR_NOTAUDIO The file does not contain audio, or it also contains video and videos are disabled.
BASS_ERROR_CODEC The file uses a codec that is not available/supported. This can apply to WAV and AIFF files, and also MP3 files when using the "MP3-free" BASS version.
BASS_ERROR_FORMAT The sample format is not supported by the device/drivers. If the stream is more than stereo or the BASS_SAMPLE_FLOAT flag is used, it could be that they are not supported.
BASS_ERROR_SPEAKER The specified SPEAKER flags are invalid. The device/drivers do not support them, they are attempting to assign a stereo stream to a mono speaker or 3D functionality is enabled.
BASS_ERROR_MEM There is insufficient memory.
BASS_ERROR_NO3D Could not initialize 3D support.
BASS_ERROR_UNKNOWN

Some other mystery problem!

 

Ссылка на комментарий
  • 0

При текущем коде, показывает цифру 5. Судя по ссылке: http://www.un4seen.com/doc/#bass/BASS_ErrorGetCode.html

это BASS_ERROR_HANDLE. ?

 

procedure TForm1.Button1Click(Sender: TObject);
var
  M: TMarshaller;

begin

 BASS_StreamFree(str);
 //str := BASS_StreamCreateURL(M.AsAnsi('http://91.199.194.34:8000').ToPointer, 0, 0, nil, nil);
 str := BASS_StreamCreateURL(('http://91.199.194.34:8000'), 0, 0, nil, nil);
 //str := BASS_StreamCreateURL(Pchar('http://91.199.194.34:8000'), 0, 0, nil, nil);
 //str := BASS_StreamCreateURL(PChar('http://91.199.194.34:8000'),0,BASS_STREAM_STATUS or BASS_UNICODE,nil,nil);

 if(str = 0) then
  begin
    ShowMessage('Проблема!');
  end;

 BASS_SetVolume(TrackBar1.Value/100.0);
 BASS_ChannelPlay(str, True);
 ShowMessage(IntToStr(BASS_ErrorGetCode));

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 BASS_ChannelStop(str);
 BASS_SampleFree (smp);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 TrackBar1.Value := 10;


 if not BASS_Init(-1, 44100, 0, nil, nil) then
	  ShowMessage('Не удалось инициализировать audio!');
end;

 

Ссылка на комментарий
  • 0

Спасибо. У меня проект расположен в папке C:\Users\Lena\Documents\Embarcadero\Studio\Projects\delphi82

Наверное надо будет поправить пути которые у меня для проекта как на картинке.

Сам архив великоват из-за SO файлов. Тут: http://nsnllc.um.la/delphi82.zip

Просьба попробовать откомпилировать в режиме релиза также. В режиме релиза вылазит ошибка не связанная с проектом и очень странная. В эмбаркедеро молчат:

https://community.idera.com/developer-tools/platforms/f/android-platform/73450/strange-error

 

 

path.jpg

Ссылка на комментарий
  • 0

Спасибо. Буду пробовать.

А том, что с URL все нормально, можно проверить так:

1. Загрузить ZIP файл.
2. Открыть - P.R.Chernivtsi - .m3u с помощь MCP player. Будет слышна музыка. В заголовке окна плеера : 91.199.194.34:8000. Значит MCP исхитрился и все сделал как надо...
3. Открыть - P.R.Chernivtsi - .m3u c помощью Блокнота. Там увидим http://91.199.194.34:8000.
Проект для Windows+Bass, работает нормально по этому URL. Слышно музыку... А вот в ведроиде не хочет...

 

- P.R.Chernivtsi - .zip

Ссылка на комментарий
  • 0

Автор библиотеки Indy высказал предположение почему работает в Windows и не работает в Андроид:

Цитата

 In my case, when I request http://91.199.194.34:8000/ in a web browser on Windows, I get an HTTP redirect to an HTML status page, so perhaps the HTTP server is looking at the request's "User-Agent" header to deliver different data depending on what kind of client is requesting it?  What does BASS's default "User-Agent" actually look like on Windows vs Android? You can use BASS_GetConfigPtr(BASS_CONFIG_NET_AGENT) to retrieve it.   You MIGHT need to use BASS_SetConfigPtr(BASS_CONFIG_NET_AGENT) to change it for your Android app.

Что-то связано с User-Agent. Пока не разобралась...

Ссылка на комментарий
  • 0

Ответ из тех.поддержки BASS. Как реализовать в проекте дельфи, по шагам, то о чем они пишут (Я использую Readmi 5A MUI Global 11.0.21 Android 8.1.0 OPM1.171019.026)?:

Error code 41 is BASS_ERROR_FILEFORM, which means the file format wasn't recognised/supported. The URL in the code above is AAC/ADTS, which is usually supported as standard (without add-ons) on Android. What device are you testing on? If it doesn't include AAC support, you can try adding the BASS_AAC add-on to your app:

   www.un4seen.com/stuff/bass_aac-android.zip

Load it via BASS_PluginLoad, like this:
 

Code: [Select]

BASS.BASS_PluginLoad("libbass_aac.so", 0);

Изменено пользователем Ingalime
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...