![]() |
Stream mit bass.dll
Hallo,
ich möchte mit der bass.dll gerne einen Stream emfangen, den Stream mit anderer Bitrate neue encodieren und an einen anderen Shoutcast-Server streamen. Der Computer hat keine Soundkarte deshalb verwende ich den decoding channel. Hier ist der Code: Setup and create mixer:
Code:
BASS_FX_GetVersion();
BASS_Init(0, 44100, BASS_DEVICE_FREQ, 0, nil); BASS_SetConfig(BASS_CONFIG_NET_PLAYLIST, 1); BASS_SetConfig(BASS_CONFIG_FLOATDSP, 1); mix:= BASS_Mixer_StreamCreate(44100, 2, BASS_STREAM_DECODE ); Create Player:
Code:
chan := BASS_StreamCreateURL('http://.....:8000/', 0 ,BASS_STREAM_DECODE,nil, nil);
s1 := BASS_Mixer_StreamAddChannel(mix, chan, BASS_STREAM_DECODE); p := @chan; Thread := BeginThread(nil,0 , @DataThread, p, 0, ThreadID); // Thread to receive data from channel Thread to receive data from channel:
Code:
repeat
try nread := BASS_ChannelGetData(chan, @buf, sizeof(buf)); except err := Bass_errorgetcode(); end; until (nread <= 0); Mixer to Encoder:
Code:
Encoder := BASS_Encode_Start(mix, 'lame.exe -r -s 44100 -b 128 -', BASS_ENCODE_FP_16BIT, nil, nil);
s3 := BASS_Encode_CastInit(encoder, 'http://....:2680', 'PASSWORD', BASS_ENCODE_TYPE_MP3, 'TITLE','http://www.......','Pop', nil, nil, 128, TRUE); p := @mix; Thread := BeginThread(nil,0 , @DataThread, p, 0, ThreadID); // Thread to receive data from mixer Thread to receive data from mixer:
Code:
repeat
try nread := BASS_ChannelGetData(mix, @buf, sizeof(buf)); except err := Bass_errorgetcode(); end; until (nread <= 0); Ich habe nun das Problem das der stream immer nach gut 5 Sekunden abbricht und nicht mehr gestreamed wird. Hat jemand eine Idee? |
AW: Stream mit bass.dll
Ich denke mal das es daran liegt das du hier mit repeat arbeitest
es wäre besser wenn du die dafür vorgesehene Callback verwendest. Warum einen eigenen Thread? Siehe!
Delphi-Quellcode:
und oder
RECORDPROC = function(handle: HRECORD; buffer: Pointer; length: DWORD; user: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
{ Recording callback function. handle : The recording handle buffer : Buffer containing the recorded sample data length : Number of bytes user : The 'user' parameter value given when calling BASS_RecordStart RETURN : TRUE = continue recording, FALSE = stop }
Delphi-Quellcode:
DOWNLOADPROC = procedure(buffer: Pointer; length: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
{ Internet stream download callback function. buffer : Buffer containing the downloaded data... NULL=end of download length : Number of bytes in the buffer user : The 'user' parameter value given when calling BASS_StreamCreateURL }
Delphi-Quellcode:
Diese Funktionen sind extra dafür angelegt.
// callback function types
STREAMPROC = function(handle: HSTREAM; buffer: Pointer; length: DWORD; user: Pointer): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; { User stream callback function. NOTE: A stream function should obviously be as quick as possible, other streams (and MOD musics) can't be mixed until it's finished. handle : The stream that needs writing buffer : Buffer to write the samples in length : Number of bytes to write user : The 'user' parameter value given when calling BASS_StreamCreate RETURN : Number of bytes written. Set the BASS_STREAMPROC_END flag to end the stream. } gruss |
AW: Stream mit bass.dll
Danke für die Antwort! Die DOWNLOADPROC für den Channel war zunächst schon einmal die Lösung für das erste Problem. Es ist aber noch ein weiteres Problem aufgetreten. Der Channel wird dann ja einem (Decoding-)Mixer zugewiesen von dem ich mir ja auch die Daten holen muss. Wie mache ich das denn? Wenn ich nun mit Bass_Channelgetdata von Mixer die Daten hole kommt nichts an...
|
AW: Stream mit bass.dll
Zitat:
Denn ohne wird es nicht gehen. Versuchs doch mal mit BASS_Mixer_ChannelGetData ;) gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz