![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Делая программку и нужно воспроизведение файла из сети, BASS_StreamCreateUrl - почемуто глючит страшно, пробывал всяко вот последнее что не работает)
Код:
stop:=false;
ObhRazPredZagr:=GetSize(filelink);
hUrl:=InternetOpenUrl(hInet,PChar(filelink), pchar(Header), StrLen(pchar(Header)),0,0);
//if Assigned(MusicBuffer) then MusicBuffer.Free;
MusicBuffer:=TMemoryStream.Create;
MusicBuffer.Position:=0;
BASS_StreamFree(url_radio);
repeat
begin
InternetReadFile(hUrl,@Buffer,sizeof(Buffer),Read);
MusicBuffer.Write(Buffer,read);
PlaySize:=PlaySize+Read;
all:=all+Read;
if okplload=true then begin
FreeMem(memp);
memp:=StreamToByteArray(kdob,MusicBuffer);
kdob:=MusicBuffer.Size;
BASS_StreamPutFileData(url_radio,memp,2048);
end;
if (PlaySize>102400) and (okplload=false) then begin
kdob:= MusicBuffer.Size;
memp:=StreamToByteArray(0,MusicBuffer);
url_radio:=BASS_StreamCreateFile(True, memp, 0, ObhRazPredZagr, STREAMFILE_BUFFERPUSH {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
BASS_ChannelPlay(url_radio, False);
okplload:=true;
end; |
|
#2
|
||||
|
||||
|
Посмотреть примеры поставляемые с BASS, в частности NetRadio, и убедиться, что ничего не глючит, а очень даже стабильно работает.
|
|
#3
|
|||
|
|||
|
У меня на компе все стабильно, на другом компе где тоже как и меня 8ка выдает ошибку((( Плюс интернет плохой так вообще ужас, а так я в ручную буду контралировать все действия, почему так то не работает вроде все верно(((
Код:
stop:Boolean;
Buffer: array [0..2047] of byte;
cli:integer;
Read:Cardinal;
hUrl:HINTERNET;
Header:String;
Tim:TDateTime;
memp,memn:Pointer;
okplload:Boolean;
kdob,pop:Int64;
WHdr:TWAVHDR;
InternetReadFile(hUrl,@Buffer,sizeof(Buffer),Read);
MusicBuffer.Write(Buffer,read);
PlaySize:=PlaySize+Read;
all:=all+Read;
if okplload=true then begin
memp:=StreamToByteArray(kdob,MusicBuffer);
kdob:=MusicBuffer.Size;
BASS_ChannelLock(url_radio, true);
BASS_StreamPutData(url_radio,memp,MusicBuffer.Size-kdob);
BASS_ChannelLock(url_radio, false);
BASS_ChannelPlay(url_radio, False);
FreeMem(memp);
end;
if (PlaySize>102400) and (okplload=false) then begin
kdob:= MusicBuffer.Size;
memp:=StreamToByteArray(0,MusicBuffer);
url_radio:=BASS_StreamCreateFile(True, memp, 0, MusicBuffer.Size, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
BASS_ChannelGetInfo(url_radio,WHdr.INFO);
BASS_StreamFree(url_radio);
FreeMem(memp);
memp:=StreamToByteArray(0,MusicBuffer);
url_radio:=BASS_StreamCreate(WHdr.INFO.freq, WHdr.INFO.chans, WHdr.INFO.flags, STREAMPROC_PUSH, NIL);
BASS_ChannelLock(url_radio, true);
BASS_StreamPutData(url_radio,memp,MusicBuffer.Size);
BASS_ChannelLock(url_radio, false);
BASS_ChannelPlay(url_radio, False);
FreeMem(memp);
okplload:=true;
end; |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
Извини, но то просто выкидывает, то Access Violation, хотя повторюсь дома играет все отлично.(StreamCreateUrl)
А на предидущем коде идет просто шум(( В принципе я гружу 100 Кб узнаю информацию о треке, создаю поток, вставляю туда данные по мере скачивания и воспроизвожу! Последний раз редактировалось ProDaNTe, 13.04.2015 в 13:53. |
|
#6
|
||||
|
||||
|
Увы, в данный момент XE версии у меня нет.
Разбираться в таком "грязном" коде очень тяжело, но обратил внимание, что в процедуре Play могут возникать ситуации, когда битмап не будет освобождаться. На весь код терпения не хватило. |
|
#7
|
|||
|
|||
|
Да, мой код очень грязный, но так как кода как такового там очень мало мне не доставляет это трудности, мне лишь интересует часть из нескольких строк про воспроизведение из потока
Код:
stop:Boolean;
Buffer: array [0..2047] of byte;
cli:integer;
Read:Cardinal;
hUrl:HINTERNET;
Header:String;
Tim:TDateTime;
memp,memn:Pointer;
okplload:Boolean;
kdob,pop:Int64;
WHdr:TWAVHDR;
InternetReadFile(hUrl,@Buffer,sizeof(Buffer),Read);
MusicBuffer.Write(Buffer,read);
PlaySize:=PlaySize+Read;
all:=all+Read;
if okplload=true then begin
memp:=StreamToByteArray(kdob,MusicBuffer);
kdob:=MusicBuffer.Size;
BASS_ChannelLock(url_radio, true);
BASS_StreamPutData(url_radio,memp,MusicBuffer.Size-kdob);
BASS_ChannelLock(url_radio, false);
BASS_ChannelPlay(url_radio, False);
FreeMem(memp);
end;
if (PlaySize>102400) and (okplload=false) then begin
kdob:= MusicBuffer.Size;
memp:=StreamToByteArray(0,MusicBuffer);
url_radio:=BASS_StreamCreateFile(True, memp, 0, MusicBuffer.Size, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
BASS_ChannelGetInfo(url_radio,WHdr.INFO);
BASS_StreamFree(url_radio);
FreeMem(memp);
memp:=StreamToByteArray(0,MusicBuffer);
url_radio:=BASS_StreamCreate(WHdr.INFO.freq, WHdr.INFO.chans, WHdr.INFO.flags, STREAMPROC_PUSH, NIL);
BASS_ChannelLock(url_radio, true);
BASS_StreamPutData(url_radio,memp,MusicBuffer.Size);
BASS_ChannelLock(url_radio, false);
BASS_ChannelPlay(url_radio, False);
FreeMem(memp);
okplload:=true;
end; |