Ingalime Опубликовано 22 сентября, 2020 Поделиться Опубликовано 22 сентября, 2020 (изменено) Подскажите, пожалуйста, можно ли воспроизводить аудио поток в FMX, если известен статический адрес и порт -> IP:порт? Спасибо. Изменено 22 сентября, 2020 пользователем Ingalime Цитата Ссылка на комментарий
0 Slym Опубликовано 23 сентября, 2020 Поделиться Опубликовано 23 сентября, 2020 Нет. я свой статический адрес и порт прикрыл фаирволом и другим советую Цитата Ссылка на комментарий
0 Tumaso Опубликовано 23 сентября, 2020 Поделиться Опубликовано 23 сентября, 2020 7 часов назад, Slym сказал: Нет. я свой статический адрес и порт прикрыл фаирволом и другим советую А причем тут твой фаервол? Вопрос совсем о другом, о принципиальной возможности воспроизведения аудиопотока с указаного адреса/порта в FMX Стандартный TMediaPlayer из FMX полное убожесто, не работает нормально даже в 10.4.1, поэтому про него можно забыть. Если еще кто то в него верит и надеется на чудо. Теоретически это могут делать FFMPEG VCL (поддерживает и FMX) и Alcinoe Ingalime 1 Цитата Ссылка на комментарий
0 Slym Опубликовано 23 сентября, 2020 Поделиться Опубликовано 23 сентября, 2020 1 час назад, Tumaso сказал: А причем тут твой фаервол? Вопрос совсем о другом, о принципиальной возможности воспроизведения аудиопотока с указаного адреса/порта в FMX А при том что надо разделять транспорт, кодек и hal... я без проблем сделаю TCP/HTTP запрос, до что делать с данными? а может там udp? нужен декодер, и управлялка потоком декодер может и найду, но что делать с PCM данными... нужен компонент вывода звука вывод может найду... а если хотите кинуть батон и в продакшон... ищите сами Ingalime 1 Цитата Ссылка на комментарий
0 Ingalime Опубликовано 23 сентября, 2020 Автор Поделиться Опубликовано 23 сентября, 2020 Вроде с 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 Ingalime Опубликовано 23 сентября, 2020 Автор Поделиться Опубликовано 23 сентября, 2020 (изменено) В общем для 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); } //--------------------------------------------------------------------------- Теперь буду пробовать для Андроида портировать... Изменено 23 сентября, 2020 пользователем Ingalime Цитата Ссылка на комментарий
0 Ingalime Опубликовано 26 сентября, 2020 Автор Поделиться Опубликовано 26 сентября, 2020 Хочу попробовать переписать на Дельфи. Помогите, пожалуйста, исправить 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 krapotkin Опубликовано 28 сентября, 2020 Поделиться Опубликовано 28 сентября, 2020 Не нужно использовать AnsiChar ни в Windows ни в Android BASS прекрасно работает с Unicode - строками Ingalime 1 Цитата Ссылка на комментарий
0 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 Создание приложения для Андроид с использованием 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. krapotkin 1 Цитата Ссылка на комментарий
0 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 Прошу не пинать, это мой первый код на паскале. Не могу понять, как проверить, что 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 krapotkin Опубликовано 29 сентября, 2020 Поделиться Опубликовано 29 сентября, 2020 я все равно не понимаю, для чего там ANSI url: PChar значит просто 'xxxxxxx' и все. если не понравится, то pchar('xxxxxxx'), она поймет ну и раз возвращает HSTREAM это не указатель, а просто число, значит не =NIL а =0 Ingalime 1 Цитата Ссылка на комментарий
0 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 Во всех трех вариантах вижу 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 krapotkin Опубликовано 29 сентября, 2020 Поделиться Опубликовано 29 сентября, 2020 есть еще предположение, что надо разрешить http на android. По умолчанию только https работает Ingalime 1 Цитата Ссылка на комментарий
0 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 18 минут назад, krapotkin сказал: есть еще предположение, что надо разрешить http на android. По умолчанию только https работает А где эти настройки? Или это в коде надо? Цитата Ссылка на комментарий
0 krapotkin Опубликовано 29 сентября, 2020 Поделиться Опубликовано 29 сентября, 2020 Простой способ реализовать это-использовать этот атрибут для вашего AndroidManifest.xml , где вы разрешаете все http для всех запросов: android:usesCleartextTraffic="true" Ingalime 1 Цитата Ссылка на комментарий
0 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 Не помогло. На Windows работает, на ведроиде не хочет... Цитата Ссылка на комментарий
0 krapotkin Опубликовано 29 сентября, 2020 Поделиться Опубликовано 29 сентября, 2020 А что говорит 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 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 При текущем коде, показывает цифру 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 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 Нет, цифра 20. Не там поставила ShowMessage(IntToStr(BASS_ErrorGetCode)); Надо сразу за str := Цитата Ссылка на комментарий
0 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 При таком коде Ошибка 20 str := BASS_StreamCreateURL(('http://91.199.194.34:8000'), 0, 0, nil, nil); При таком коде Ошибка 41 str := BASS_StreamCreateURL(M.AsAnsi('http://91.199.194.34:8000').ToPointer, 0, 0, nil, nil); Цитата Ссылка на комментарий
0 krapotkin Опубликовано 29 сентября, 2020 Поделиться Опубликовано 29 сентября, 2020 если до вечера не добьешь, кинь проект, я попробую у себя Цитата Ссылка на комментарий
0 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 Спасибо. У меня проект расположен в папке 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 Цитата Ссылка на комментарий
0 OnePeople Опубликовано 29 сентября, 2020 Поделиться Опубликовано 29 сентября, 2020 Пользуюсь этим pas попробуйте bassandr.rar Ingalime 1 Цитата Ссылка на комментарий
0 Ingalime Опубликовано 29 сентября, 2020 Автор Поделиться Опубликовано 29 сентября, 2020 Спасибо. Буду пробовать. А том, что с 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 Ingalime Опубликовано 30 сентября, 2020 Автор Поделиться Опубликовано 30 сентября, 2020 Автор библиотеки 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 Ingalime Опубликовано 30 сентября, 2020 Автор Поделиться Опубликовано 30 сентября, 2020 (изменено) Ответ из тех.поддержки 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.zipLoad it via BASS_PluginLoad, like this: Code: [Select] BASS.BASS_PluginLoad("libbass_aac.so", 0); Изменено 30 сентября, 2020 пользователем Ingalime Цитата Ссылка на комментарий
Вопрос
Ingalime
Подскажите, пожалуйста, можно ли воспроизводить аудио поток в FMX, если известен статический адрес и порт -> IP:порт?
Спасибо.
Изменено пользователем IngalimeСсылка на комментарий
Лучшие авторы в вопросе
12
11
48
5
Популярные дни
29 сент
16
23 окт
11
5 окт
9
2 окт
6
Лучшие авторы в вопросе
krapotkin 12 постов
OnePeople 11 постов
Ingalime 48 постов
Alexandr 5 постов
Популярные дни
29 сент 2020
16 постов
23 окт 2020
11 постов
5 окт 2020
9 постов
2 окт 2020
6 постов
Популярные посты
krapotkin
в оригинале нет такого слова AApplication посмотрите, что реально загрузилось обратите внимание, что delphi в 2021 все еще не умеет считать символы если перевод строки #10 а не #13#10
OnePeople
По поведению на различных прошивках я не могу вам ни чего сказать вообще не думаю что это связанно с версией андроида, а связанно с прошивкой вендора. Выдернул из рабочего проекта, строго не пина
Tumaso
А причем тут твой фаервол? Вопрос совсем о другом, о принципиальной возможности воспроизведения аудиопотока с указаного адреса/порта в FMX Стандартный TMediaPlayer из FMX полное убожесто, не раб
Изображения в теме
82 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.