2004-10-20 01:38

by Vasil Kolev

Най-важното за днес – намерих проблема с ffserver. Всъщност, се оказа проблем с ffmpeg, но отне бая време да го изровя, и след това да открия, че това са го оправили в новите версии (и са строшили куп други неща :) ).

Проблемът беше в libavformat/tcp.c, правеше се следното(премахнал съм малко ifdef-ове):

        ret = write(s->fd, buf, size);
        if (ret < 0 && errno != EINTR && errno != EAGAIN)
            return -errno;
        size -= ret;
        buf += ret;

Което при EAGAIN или EINTR всъщност мърда буфера в обратната посока, понеже ret=-1. Така потока, пращан от ffmpeg, се намазва, и ffserver-а полудява.

Отидох да погледна в cvs-а, и какво открих - проблема е оправен ето тук, точно след release на 0.4.8. Да бях се усетил да разгледам самия ffmpeg как се държи, още с първия strace го хванах, че мести буфера назад, ето и изхода:

write(4, "fm\0\0\0\3\346\323\337\326< |\10\r\35?\225j\234G\260\263"..., 32768) = 3432
write(4, "\23\21\330\214V1WD\6\347;\305\213\24A\265C\323g\3238/\310"..., 29336) = -1 EAGAIN (Resource temporarily unavailable)
write(4, "\v\23\21\330\214V1WD\6\347;\305\213\24A\265C\323g\3238"..., 29337) = -1 EAGAIN (Resource temporarily unavailable)
write(4, "M\v\23\21\330\214V1WD\6\347;\305\213\24A\265C\323g\323"..., 29338) = -1 EAGAIN (Resource temporarily unavailable)
write(4, "\vM\v\23\21\330\214V1WD\6\347;\305\213\24A\265C\323g\323"..., 29339) = -1 EAGAIN (Resource temporarily unavailable)
write(4, "%\vM\v\23\21\330\214V1WD\6\347;\305\213\24A\265C\323g\323"..., 29340) = -1 EAGAIN (Resource temporarily unavailable)

И за да може да хване google търсенията по-добре, кратко описание на проблема: ffserver дава segmentation fault (т.е. SIGSEGV) при мрежови проблеми при връзката м/у ffmpeg и ffserver.

Другото днес беше занимаването ми с един Itanium2, който ще показваме на openfest - в крайна сметка ще сваля някаква друга дистрибуция, за момента има един SLES8, който обаче е адски outdated. Освен това машината бучи като за два 32битови сървъра, и ме боли главата... Не ми харесва и как се движи - изглежда, за да работи нещо добре на нея, трябва да се компилира с ICC, а това е леко сложна задача за linux, най-малкото защото не всичко, компилирано с тоя компилатор работи (пример - linux kernel, с изчистени GNU-изми).

Leave a Reply