LINUX.ORG.RU

live555: останавливает работу после первого кадра

 


0

1

Доброго дня!
Для создания RTP потока использую live555 2013.11.29.
main

char is_stop = 0;
try {
    rtp = new RTP(env, cfg, MAX_SHARED_SIZE, frame);
} catch (std::bad_alloc &e) {
    *env << "Failed allocate memory for RTP class: " << e.what() << "\n";
    goto EXIT;
}
env->taskScheduler().doEventLoop(&is_stop);
класс RTP
bool RTP::start(MediaSource &src)
{
	bool r = _sink->startPlaying(src, NULL, NULL);
	if (r)
		*_env << "Starting RTP stream "
                        << sink->rtpPayloadFormatName()
			<< " to " << inet_ntoa(_sock->groupAddress()) << "\n";
	else
		*_env << "Failed starting RTP stream: "
			<< *_env->getResultMsg() << "\n";

	return r;
}
получение данных
void Frame::doGetNextFrame()
{
.........
    FramedSource::afterGetting(this);
}
Функция start вызывается в конструкторе класса если нет никаких ошибок. Судя по выводимому сообщению ошибок нет и поток стартовал. Но есть одно, периодически получение и отправка кадров останавливается после первого кадра, хотя сама программа продолжает работать, переменная is_stop не меняет своего значения. Создаётся впечатление, что функцию doGetNextFrame перестают вызывать.
Собственно вывод отладочной информации Socket::DebugLevel = 3 это подтверждает
00:03:20 Groupsock(3: 224.1.4.6, 5000, 64): created
00:03:20 Groupsock(3: 224.1.4.6, 5000, 64): wrote 1448 bytes, ttl 64
Starting RTP stream JPEG to 224.1.4.6
00:03:20 Groupsock(3: 224.1.4.6, 5000, 64): wrote 1448 bytes, ttl 64
00:03:20 Groupsock(3: 224.1.4.6, 5000, 64): wrote 1448 bytes, ttl 64
.......................
00:03:20 Groupsock(3: 224.1.4.6, 5000, 64): wrote 272 bytes, ttl 64
00:03:20 Groupsock(3: 224.1.4.6, 5000, 64): wrote 272 bytes, ttl 64
^C00:03:24 Groupsock(3: 224.1.4.6, 5000, 64): deleting
Вопрос - что можно проверить/донастроить что бы подобного не происходило?
Спасибо.

★★

Последнее исправление: imb (всего исправлений: 1)

Врят ли тебе тут помогут, пиши в maillist либы. Когда я писал, то отвечали оперативно. У меня последовательность инициализации другая. Я использовал rtspClient типа:

1. scheduler = BasicTaskScheduler::createNew();
2. env = BasicUsageEnvironment::createNew(scheduler);
3. rtspClient = ourRTSPClient::createNew(env, url, level, name);
4. pauseTriggerId = env->taskScheduler().createEventTrigger(&pauseSessionTrigger);
5. playTriggerId  = env->taskScheduler().createEventTrigger(&playSessionTrigger);
6. rtspClient->sendDescribeCommand(continueAfterDESCRIBE);
7. env->taskScheduler().doEventLoop(&loop_blocked);

yukach
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.