AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stream mit bass.dll

Ein Thema von Philipp1977 · begonnen am 12. Apr 2015 · letzter Beitrag vom 20. Apr 2015
Antwort Antwort
Philipp1977

Registriert seit: 7. Aug 2014
9 Beiträge
 
#1

Stream mit bass.dll

  Alt 12. Apr 2015, 10:40
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?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Stream mit bass.dll

  Alt 12. Apr 2015, 15:00
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:
  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
  }
und oder
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:
  // 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.
  }
Diese Funktionen sind extra dafür angelegt.

gruss

Geändert von EWeiss (12. Apr 2015 um 15:02 Uhr)
  Mit Zitat antworten Zitat
Philipp1977

Registriert seit: 7. Aug 2014
9 Beiträge
 
#3

AW: Stream mit bass.dll

  Alt 20. Apr 2015, 18:30
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...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Stream mit bass.dll

  Alt 20. Apr 2015, 20:50
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...
Verwendest du nur die Bass.dll oder auch die Bassmix.dll ?
Denn ohne wird es nicht gehen.

Versuchs doch mal mit BASS_Mixer_ChannelGetData

gruss

Geändert von EWeiss (20. Apr 2015 um 20:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz