Beispiel #1
0
            $peers = $one->getPeers();
            if (empty($peers)) {
                $tmp[2] = 'close';
                $channels[] = $tmp;
            } else {
                foreach ($peers as $peer => $client) {
                    $tmp[5] = sprintf('%s %d%%', $client->getName(), $client->getPointerPosition());
                    $channels[] = $tmp;
                    $tmp = array(0 => '', '', '', '', '', '', '', '');
                }
            }
        }
        // это чтобы удалились все ссылки на объекты потока и клиента
        unset($client);
        unset($one);
        $EVENTS->tick($channels);
        // увеличение с 20 до 100мс улучшило ситуацию с переполнением клиентских сокетов
        usleep(30000);
    } catch (Exception $e) {
        $EVENTS->error($e->getMessage());
    }
}
// тормозим все трансляции, закрываем сокеты Ace
$streams->closeAll();
// AceProxy на кривой урл не выдает понятного для XBMC ответа, тот повторяет попытки открыть урл
// m3u открывается долго, потому как XBMC делает по 2 инфо-запроса: HEAD и Range:0-0, на что тоже не получает внятного ответа
// из-за 2 причин выше остановка потока не отрабатывает нормально (висит, пока не пройдут запросы по всем эл-там плейлиста)
// ссылка критична к /stream.mp4 на хвосте ссылки (/pid/<pid>/stream.mp4)
// для трансляции одного потока на несколько клиентов требует VLC
// при нажатии на эл-т плейлиста XBMC замирает секунды на 3-4, затем идет Подождите, потом только пойдет видео
// иногда, нажав на стоп в момент затыка, приходится долго ждать, пока пойдут данные, чтобы XBMC отвис