Deutsch > Dokumentation

Darkice Fehlermeldung mit FM Radio

(1/3) > >>

kaelectro:
Die Installation von Sundtek MediaTV Pro III auf meinem Raspberry Pi Model B lief problemlos und ich bekomme ein Audiosignal.

Betriebssystem: Debian Whezzy

Bisherige Schritte:
$ wget http://www.sundtek.de/media/sundtek_netinst.sh
$ chmod 755 sundtek_netinst.sh
$ sudo ./sundtek_netinst.sh
$ /opt/bin/mediaclient -f 105700000 -m RADIO -d /dev/radio0 -t 0

$ /opt/bin/mediaclient -m RADIO -d /dev/radio0 --mute off

$ cat /dev/radio0

wird der Streaminhalt angezeigt.

$ cat /dev/radio0 | aplay
wird der Audiostream hörbar ausgegeben.

$ sudo apt-get install darkice
Darkice installiert.

$ sudo /etc/darkice.cfg
Konfigurationsdatei erstellt mit folgendem Inhalt:
[general]
duration        = 0        # Dauer der Encodierung in Sekunden. 0 für endlos.
bufferSecs      = 5         # Größe des internen Buffer in Sekunden.
reconnect       = yes       # Wiederverbinden bei Verbindungsverlust.

[input]
device          = /dev/radio0  # OSS DSP Soundkarten-Eingang
sampleRate      = 48000     # Samplerate in Hz. Gängige Werte: 11025, 22050, 44100, 48000
bitsPerSample   = 16        # Bits pro Sample
channel         = 2         # Kanäle. 1 = mono, 2 = stereo

[icecast2-0]
bitrateMode     = abr        # Bitraten Modus: Mittlere Bitrate
format          = vorbis     # Format des Streams: Ogg Vorbis
bitrate         = 128         # Bitrate des Streams der zum Server gesendet wird
server          = localhost  # Hostname oder IP-Adresse des Icecast Servers
port            = 8000       # Port des Icecast Servers, gewöhnlich 8000
password        = XXXXX     # Passwort des Benutzers source auf dem Icecast Server
mountPoint      = stream     # Einebindepunkt des Streams am Server
name            = IceTest    # Metadaten: Name der Radio Station
description     = IceText    # Metadaten: Beschreibung der Radio Station
url             = http://... # URL der Radio Station
genre           = Rock       # Metadaten: Genre der Radio Station
public          = no         # Veröffentlichung der Metdaten zur Radio Station

Fehlermeldung:

Using config file: /etc/darkice.cfg
Using OSS DSP input device: /dev/radio0
Using POSIX real-time scheduling, priority 98
DarkIce: OssDspSource.cpp:202: can't set format [16]^


Brauche bitte einen Lösungsansatz
MfG
KaElectro

Sundtek:
Das Problem findet sich in Darkice;


z.B.:

src/VorbisLibEncoder.cpp
Util::conv( bitsPerSample, b, processed, shortBuffer, isInBigEndian());

src/TwoLameLibEncoder.cpp
        Util::conv16( b,
                      processed,
                      leftBuffer,
                      rightBuffer,
                      inChannels,
                      isInBigEndian());



./src/OssDspSource.cpp (Zeile 202):
    i = format;
    if ( ioctl( fileDescriptor, SNDCTL_DSP_SETFMT, &i) == -1 ||
         i != format ) {

        close();
        throw Exception( __FILE__, __LINE__, "can't set format", i);
    }




Kurze Problembeschreibung, die Audiodaten kommen als AA BB AA BB vom USB Device am PC an.
Nun versucht darkice hier die CPU native Bytedarstellung anzufordern was wir nicht machen können (auf dem Raspberry PI wäre das dann BB AA BB AA etc.).


Sprich du musst Darkice umstellen damit es Little Endian verwendet, der Endiancheck in Util::conv müsste auf "false" gesetzt werden.


--- Code: ---        Util::conv16( b,
                      processed,
                      leftBuffer,
                      rightBuffer,
                      inChannels,
                      false);

und der Audiocheck kann dann auch ignoriert werden:
./src/OssDspSource.cpp (Zeile 202):

aus:
    if ( ioctl( fileDescriptor, SNDCTL_DSP_SETFMT, &i) == -1 ||
         i != format ) {
mach folgendes (i!=format) entfernen:
    if ( ioctl( fileDescriptor, SNDCTL_DSP_SETFMT, &i) == -1) {

--- Ende Code ---

kaelectro:
Moin,

anbei meine Änderungen...

VorbisLibEncoder.cpp
Util::conv( bitsPerSample, b, processed, shortBuffer, false);

TwoLameLibEncoder.cpp
       Util::conv16( b,
                      processed,
                      leftBuffer,
                      rightBuffer,
                      inChannels,
                      false);

OssDspSource.cpp
    i = format;
    if ( ioctl( fileDescriptor, SNDCTL_DSP_SETFMT, &i) == -1
       ) {
        close();
        throw Exception( __FILE__, __LINE__, "can't set format", i);
         }

Kompiliert
Gleiche Fehler Erscheinung wie vorher.
Kpl Inhalt der IF Schleife auskommentiert...

OssDspSource.cpp
    i = format;
    if ( ioctl( fileDescriptor, SNDCTL_DSP_SETFMT, &i) == -1
       ) {
/*        close();
        throw Exception( __FILE__, __LINE__, "can't set format", i);
*/    }

Neuer Fehler, kann die Channel nicht setzten:
Channel Anweisungen auskommentiert.

    if ( ioctl( fileDescriptor, SNDCTL_DSP_CHANNELS, &u) == -1 ||
         u != getChannel() ) {
        
/*        close();
        throw Exception( __FILE__, __LINE__, "can't set channels", u);
*/    }


Neuer Fehler, kann die SampleRate nicht setzten:
SampleRate Anweisungen auskommentiert.

    if ( ioctl( fileDescriptor, SNDCTL_DSP_SPEED, &u) == -1 ) {

/*      close();
        throw Exception( __FILE__, __LINE__,
                         "can't set soundcard recording sample rate", u);
*/    }

Neuer Fehler, Read Error mit Abbruch -
Der Audio Stream auf /dev/radio0 ist auch nicht mehr da. Einen Neustart des Audiostreams geht nicht.  

/opt/bin/mediaclient -f 105700000 -m RADIO -d /dev/radio0 -t 0
/opt/bin/mediaclient -m RADIO -d /dev/radio0 --mute off

Er zeigt zwar an das der Audiostrem enabled ist aber es kommt mit

cat /dev/radio0

nichts.

Das einzige was hilft "reboot" und dann von vorne.

Brauche den Radiostick dringent um FM Radio via icecast zu streamen.

Gibt es keine Möglichkeit das Device zu konvertieren und ein neues zu generien?

Nehme ich beim Darkice-Sstream einfach das Device /dev/dsp0 kommt zwar nur ein Rauschen aber der Stream funktioniert

Habe ich auch mit LIVEICE probiert. Bricht ab weil der Encoder das Format nivht unterstürzt bei /dev/radio0. Mit /dev/dsp0 funktioniert alles reibungslos...



Sundtek:
Ah ich sehe es erst jetzt, ja es muss /dev/dsp0 verwendet werden bei Darkice; /dev/radio0 ist kein OSS Device. Das dort PCM Daten (inklusive Header) rauskommen ist eine Erweiterung in unserem Treiber, /dev/dsp0 gibt nur Rohdaten aus (ohne PCM Header) - und diese werden üblicherweise von Applikationen weiterverwertet

Du hast schon alles richtig gemacht, teste dein Setup ggf. erst mal auf dem PC dort klappt es nämlich.
Wenn du es vom Raspberry PI Streamen willst kann es sein das du die Endianess anpassen musst (falsche Endianess -> Rauschen); die Information in einem vorherigen Post sollte dir da aber weiterhelfen.

kaelectro:
Habe alles auf /dev/dsp0 geändert.

Darkice1.2 mit mp3 kompiliert.

alles gestartet und der Stream lief wunderbar.

Nach ca. 3-5 Minuten hört der Stream /dev/radio0 oder /dev/dsp0 einfach auf.

Ausgabe per
cat /dev/radio0

RIFF$▒WAVEfmt ▒▒▒data▒
Der Cat Befehlt beendet sich auch nicht automatisch.
 
Darkice läuft weiter und bricht nicht ab.

In den Logfiles ist mir nicht auffälliges entgegengesprungen.

Ist das auf dem RasPi normal, eine CPU Auslastung von 100% bei zwei Prozessen 
2303 /opt/bin/mediasrv -d --pluginpath="opt/bin
2304 /opt/bin/mediasrv -d --pluginpath="opt/bin
mit htop angezeigt ?

Noch einen Tip?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln