ошибка сегментации shout-python как я могу это исправить?

0

Я пытаюсь создать источник для icecast2/shoutcast. Но после компиляции всего, что я столкнулся с ошибкой сегментации. После дальнейшей отладки с gdb мне дали более подробную ошибку. Я не знаю c любого типа, поэтому я не уверен, что делать с этой ошибкой

Program received signal SIGSEGV, Segmentation fault.
send_mp3 (self=0x988eb0, buff =  0xa5c154 "" at mp3.c:175175 mp3.c: No such file or directory.

Я подумал, что, возможно, это цикл, использующий много ресурсов. Но независимо от того, сколько я установил time.sleep(), я все равно получил тот же результат.

import random
import shout
from pyModules import db
from pyModules import error
import ID3
import time
import sys
import glob

class Audio(object):

    def __init__(self):
        self.count = 0
        self.nbuf = 0
        self.buf = 0
        self.shout = shout.Shout()
        self.db = db.database()
        self.songs = self.load()

    def load(self):
        return glob.glob("%s*%s" % (self.config('directory'), self.config('ext')))  

    def start(self):
        self.running = True
        self.shout.host = self.config('host')
        self.shout.port = self.config('port')
        self.shout.mount = self.config('mount')
        self.shout.protocol = self.config('protocol')
        self.shout.user = self.config('user')
        self.shout.password = self.config('password')
        self.shout.name = self.config('name')
        self.shout.format = self.config('format')
        self.shout.genre = self.config('genre')
        self.shout.url = self.config('url')
        self.shout.public = self.config('public')
        self.shout.description = self.config('description')
        self.songs = self.load()
        self.shout.open()


    def cShuffle(self):
        sh = self.getSettings(1, key='shuffle')
        if sh == 1:
            random.shuffle(self.songs)

    def cNext(self):
        n = self.getSettings(1, key='setSong')
        if n == 1:
        self.stop()
            self.db.setNext(0)
            self.Change()

    def cPrev(self):
        p = self.getSettings(1, key='prevSong')
        if p == 1:
        self.stop()
            if self.count == 0:
                self.count -= 1
                self.db.setPrev(0)
                self.Change()
            else:
                self.count -= 2
                self.Change()

    def cReload(self):
        r = self.getSettings(1, key='reload')
        if r == 1:
            self.songs = self.load()

    def check(self):
        self.cShuffle()
        self.cNext()
        self.cPrev()
        self.cReload()

    def getSettings(self, mode=0, key=None):
        return self.db.getSettings(mode, key)

    def config(self, value):
        return self.db.config(value)

    def getTitle(self, File, mode=0):
        try:
            song = ID3.ID3(File)
            title = song["TITLE"]
        except:
            title = "unknown"
            title = title.replace("'", "")
        if mode == 0:
            self.db.setSongTitle(title)
            return title
        elif mode == 1:
            self.db.setNextSongTitle(title)
            return title
        elif mode == 2:
            self.db.setPrevSongTitle(title)

    def sendBlankFile(self):
        File = open('/home/radio/AudioServer/bin/blank.mp3').read()
        self.shout.send(File)

    def stop(self):
        self.buf = 0
        self.nbuf = 0
        self.running = 0
        self.sendBlankFile()

    def Change(self):
        self.stop()
        if len(self.songs) >= self.count: self.count = 0
        else: self.count += 1
        song = self.songs[self.count]
        psong = self.songs[self.count - 1]
        nsong = self.songs[self.count + 1]
        self.getTitle(song, mode=0)
        self.getTitle(nsong, mode=1)
        self.getTitle(psong, mode=2)
        self.play()

    def play(self):
        song = open(self.songs[self.count])
        cs = self.songs[self.count]
        self.shout.set_metadata({'song': self.getTitle(cs)})
        total = 0
        st = time.time()
        self.nbuf = song.read(4096)
        while self.running:
            self.check()
            self.buf = self.nbuf
            self.nbuf = song.read(4096)
            self.buf = self.nbuf
            total = total + len(self.buf)
            if len(self.buf) == 0:
                self.running = False
                self.Change()
            self.shout.send(self.buf)
            self.shout.sync()

if __name__ == "__main__":     
    Server = Audio()
    default = Server.config('default')
    Server.db.clear(default)
    Server.start()
  • 0
    after compiling everything I've run into a segmentation error .. Вы имеете в виду, while running the binary или что-то подобное?
  • 0
    Да, я полагаю, поэтому я выложу части, которые включают в себя отправку двоичного файла
Показать ещё 4 комментария
Теги:

1 ответ

0
Лучший ответ

Проблема была действительно проблемой компиляции libshout, как указал кокс. Но он работал только в debian 7, а не ubuntu 12. Я думаю, причина в том, что я не установил libogg в ubuntu, я только установил vorbis, который, как я думал, был тем же. На всякий случай я также установил кодеки MP3.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню