Jump to content

Recommended Posts

Привет всем. По совету из этой темы создаю отдельный топик про minidlna.

Проблема заключается с том, что спустя какое-то время (по наблюдениям - от 3 до 45-50 мин) просмотр файла сам по себе останавливается и через несколько секунд файл начинается сначала. Иногда - следующий в том же каталоге. Последний раз вообще даже плеер телевизора завис, пришлось переключать его в другой режим, чтобы он снялся/сбросился.

Прилагаю лог minidlna -d, там в конце видны ошибки:

[2017/06/12 16:06:50] upnphttp.c:1971: info: Serving DetailID: 35 [/opt/media/1001 ночь/BinBir Gece.s01.e22.avi]
[2017/06/12 16:06:53] upnphttp.c:1281: debug: sendfile error :: error no. 32 [Broken pipe]

их там несколько штук, т.к. я пытался несколько раз перезапустить просмотр и выполнить перемотку до места, на котором он прервался (начал с начала).

Телевизор Sharp года 2011-2012, точно не помню уже. Если нужна точная модель - залезу за него, гляну.

Если необходима доп информация - предоставлю.

Спасибо.

 

PS. Немного повторю то, что писал в других темах ранее - раньше постоянно пользовался родным DLNA из OPKG прошивки для GIGA1. Проблем не замечал. Потому minidlna из entware туда никогда не ставил и никогда не задумывался о каких-либо альтернативах.

minidlna_log.zip

Link to comment
Share on other sites

Погуглите по ошибке. Первое найденное https://sourceforge.net/p/minidlna/discussion/879956/thread/02aea513/

Автор minidlna говорит, что ведет себя не совсем корректно телевизор, и это похоже вызывает проблемы у последних версий minidlna.

Предлагаю погуглить или дальше пинать автора проги.

Как вариант сменить телевизор или dlna сервер (что Вы и делаете).

Link to comment
Share on other sites

@zyxmonА у Вас случайно нигде не завалялись исходники minidlna, который был вшит в ту полуофициальную прошивку kng_ra_delta_2.04.C.7.0-8.bin для старой белой гиги из этой темы -

? Интересует именно вшитый, не entware. Работал идеально, просто сказка была.

Я не думаю, что об этом можно спрашивать официальную техподдержку, т.к. та прошивка была собрана "по просьбам трудящихся" и не подлежала какому-либо обновлению.

Я готов сам попытаться их скомпилить/собрать, возможно попрошу помощи, т.к. с компиляцией программ на Си под линукс мало сталкивался, пишу, в основном, на питоне. На си пишу, в основном под микроконтроллеры AVR/STM32 и под винду.

Как я понимаю, на другом форуме, где-то здесь - http://forums.zyxmon.org/ На этом форуме не знаю ....

Я для пробы установил в гигу 3 gcc, скачал исходники minidlna, запустил ./configure, он выдал кучку ошибок (вроде что-то с синтаксисом) в начале, потом остановился:

configure: error: libavutil headers not found or not usable

Наверное потому, что он не рассчитан на системное окружение роутера. Возможно я вообще делал глупость и их не надо компилить в роутере.

Из нормальных линуксов есть Cloudlinux 6.9, могу развернуть CentOS, хоть в плане gcc и сопутствующих ему вещей они из одной бочки.

 

Спасибо.

Edited by hd44780
Link to comment
Share on other sites

3 часа назад, hd44780 сказал:

@zyxmonА у Вас случайно нигде не завалялись исходники minidlna, который был вшит в ту полуофициальную прошивку kng_ra_delta_2.04.C.7.0-8.bin для старой белой гиги из этой темы -

? Интересует именно вшитый, не entware. Работал идеально, просто сказка была.

Я не думаю, что об этом можно спрашивать официальную техподдержку, т.к. та прошивка была собрана "по просьбам трудящихся" и не подлежала какому-либо обновлению.

Я готов сам попытаться их скомпилить/собрать, возможно попрошу помощи, т.к. с компиляцией программ на Си под линукс мало сталкивался, пишу, в основном, на питоне. На си пишу, в основном под микроконтроллеры AVR/STM32 и под винду.

Как я понимаю, на другом форуме, где-то здесь - http://forums.zyxmon.org/ На этом форуме не знаю ....

Я для пробы установил в гигу 3 gcc, скачал исходники minidlna, запустил ./configure, он выдал кучку ошибок (вроде что-то с синтаксисом) в начале, потом остановился:

configure: error: libavutil headers not found or not usable

Наверное потому, что он не рассчитан на системное окружение роутера. Возможно я вообще делал глупость и их не надо компилить в роутере.

Из нормальных линуксов есть Cloudlinux 6.9, могу развернуть CentOS, хоть в плане gcc и сопутствующих ему вещей они из одной бочки.

 

Спасибо.

Исходники minidlna мало отличаются от текущих, скорее сменилось все вокруг - ядро, компилятор, firewall, драйверы устройств...

Link to comment
Share on other sites

@Александр Рыжов, поставил я этот xupnpd, убрал дефолтные списки, добавил своё IPTV, нашёл, как фильмы локальные добавлять - VLC и андроид-планшет всё показывают, а телевизор - ничего не показывает. Точнее у него в списке видно всё - и IPTV-каналы, и мои фильмы, но IPTV он просто не показывает (чёрный экран, хз, может кодеки тамошние ему не по зубам), а локальные фильмы все помечены крестиком - то ли он их открыть не может, то ли ещё что.

Ну да ладно, Бог с ним. У меня есть MediaTomb и встроенный minidlna ожил - в соседней теме я отписал про это, повторять здесь не буду.

 

Спасибо.

Link to comment
Share on other sites

  • 3 months later...

minidlna-1.2.1 (инфо раз, инфо два-с)

т.к. медиатека "временно недоступна", ограничился запуском

~ # ../etc/init.d/S90minidlna start
 Starting minidlna...              done. 
~ # 

и просмотром лога

~ # cat ../var/minidlna/minidlna.log 
[2017/10/13 18:13:29] minidlna.c:1231: warn: Starting MiniDLNA version 1.2.1.
[2017/10/13 18:13:29] minidlna.c:469: warn: Creating new database at /opt/var/minidlna/files.db
[2017/10/13 18:13:29] minidlna.c:1272: warn: HTTP listening on port 8200
[2017/10/13 18:13:29] scanner.c:731: warn: Scanning /opt/media
[2017/10/13 18:13:29] scanner.c:820: warn: Scanning /opt/media finished (13 files)!
[2017/10/13 18:13:29] playlist.c:135: warn: Parsing playlists...
[2017/10/13 18:13:30] playlist.c:269: warn: Finished parsing playlists.
~ #

желающие могут потестить

  • Upvote 1
Link to comment
Share on other sites

  • 2 weeks later...
  • 2 months later...

Ошибка довольно очевидная. Оказалось, что

#define SCANNING_MASK         0x0100
#define RESCAN_MASK           0x0200

И

#define THUMB_MASK            0x0100
#define THUMB_FILMSTRIP       0x0200

Флаги для обозначения совершенно разного пересекаются. Думаю исправят.....

Link to comment
Share on other sites

собрано без патча рескана

 

UPD

omni2: 2.12 - "мочит корки и выпадает в осадок"  (... process.c:140: error: Process 1234 terminated by signal 9.  A core dump was not produced....); 2.08 - "пыхтит-скрипит", но работает... и, т.к. коллекция "честно стыренных мувиков" отсутствует, проверял на МР3-файлах

Link to comment
Share on other sites

  • 2 weeks later...

Начал разбираться с тем, что рескан всей базы стартует при любом запуске minidlna, достаточно даже просто сделать:

/opt/etc/init.d/S90minidlna stop
/opt/etc/init.d/S90minidlna start

Включил debug-логи, но это ничего не прояснило, рескан стартует буквально сразу же после старта:

[2018/02/02 20:11:13] minidlna.c:1231: warn: Starting MiniDLNA version 1.2.1.
[2018/02/02 20:11:13] minidlna.c:471: warn: New media_dir detected; rebuilding...

Полез смотреть minidlna.c, но квалификации разобраться не хватило. Судя по выводу New media_dir detected; rebuilding... в лог и этому куску кода из minidlna.c:

Spoiler

static void
check_db(sqlite3 *db, int new_db, pid_t *scanner_pid)
{
	struct media_dir_s *media_path = NULL;
	char cmd[PATH_MAX*2];
	char **result;
	int i, rows = 0;
	int ret;

	if (!new_db)
	{
		/* Check if any new media dirs appeared */
		media_path = media_dirs;
		while (media_path)
		{
			ret = sql_get_int_field(db, "SELECT TIMESTAMP as TYPE from DETAILS where PATH = %Q",
						media_path->path);
			if (ret != media_path->types)
			{
				ret = 1;
				goto rescan;
			}
			media_path = media_path->next;
		}
		/* Check if any media dirs disappeared */
		sql_get_table(db, "SELECT VALUE from SETTINGS where KEY = 'media_dir'", &result, &rows, NULL);
		for (i=1; i <= rows; i++)
		{
			media_path = media_dirs;
			while (media_path)
			{
				if (strcmp(result[i], media_path->path) == 0)
					break;
				media_path = media_path->next;
			}
			if (!media_path)
			{
				ret = 2;
				sqlite3_free_table(result);
				goto rescan;
			}
		}
		sqlite3_free_table(result);
	}

	ret = db_upgrade(db);
	if (ret != 0)
	{
rescan:
		CLEARFLAG(RESCAN_MASK);
		if (ret < 0)
			DPRINTF(E_WARN, L_GENERAL, "Creating new database at %s/files.db\n", db_path);
		else if (ret == 1)
			DPRINTF(E_WARN, L_GENERAL, "New media_dir detected; rebuilding...\n");
		else if (ret == 2)
			DPRINTF(E_WARN, L_GENERAL, "Removed media_dir detected; rebuilding...\n");
		else
			DPRINTF(E_WARN, L_GENERAL, "Database version mismatch (%d => %d); need to recreate...\n",
				ret, DB_VERSION);
		sqlite3_close(db);

		snprintf(cmd, sizeof(cmd), "rm -rf %s/files.db %s/art_cache", db_path, db_path);
		if (system(cmd) != 0)
			DPRINTF(E_FATAL, L_GENERAL, "Failed to clean old file cache!  Exiting...\n");

		open_db(&db);
		if (CreateDatabase() != 0)
			DPRINTF(E_FATAL, L_GENERAL, "ERROR: Failed to create sqlite database!  Exiting...\n");
	}
	if (ret || GETFLAG(RESCAN_MASK))
	{
#if USE_FORK
		sqlite3_close(db);
		*scanner_pid = fork();
		open_db(&db);
		if (*scanner_pid == 0) /* child (scanner) process */
		{
			start_scanner();
			sqlite3_close(db);
			log_close();
			freeoptions();
			free(children);
			exit(EXIT_SUCCESS);
		}
		else if (*scanner_pid < 0)
		{
			start_scanner();
		}
		else
			SETFLAG(SCANNING_MASK);
#else
		start_scanner();
#endif
	}
}

 

переменной ret присваивается 1, а это значит, что minidlna при старте обнаруживает новую директорию (параметр media_dir в конфиге) и инициирует рескан. Проблема в том, что никаких новых директорий в конфиге на самом деле нет.

У меня в конфиге 5 параметров media_dir, вот в таком виде (где три точки уже идет реальный путь до каталога):

media_dir=V,/tmp/mnt/...
media_dir=V,/tmp/mnt/...
media_dir=/tmp/mnt/...
media_dir=V,/tmp/mnt/...
media_dir=V,/tmp/mnt/...

Почему в итоге ret = 1, не докопался.

Если кто может подсказать, в чем проблема (ждать довольно долго при каждой перезагрузке роутера напрягает), дайте знать. Могу предоставить базу или другую необходимую информацию. Хочется это победить.

UPD. Проверил созданную базу после остановки minidlna. Все пять каталогов есть в таблице DETAILS, при этом TIMESTAMP у них корректный.

Edited by Sergey Zozulya
Link to comment
Share on other sites

26 minutes ago, Sergey Zozulya said:

Если кто может подсказать, в чем проблема (ждать довольно долго при каждой перезагрузке роутера напрягает), дайте знать. Могу предоставить базу или другую необходимую информацию. Хочется это победить.

Добавьте отладку, может понятнее станет:

			...
			if (ret != media_path->types)
			{
				DPRINTF(E_WARN, L_GENERAL, "ret (%i) != media_path->types (%i), path = \"%s\"\n", ret, (int) media_path->types, media_path->path);
				ret = 1;
				goto rescan;
			}
			media_path = media_path->next;
		}
		/* Check if any media dirs disappeared */
		...

 
Link to comment
Share on other sites

2 minutes ago, sergeyk said:

Добавьте отладку, может понятнее станет

Идею понял, но это только если попросить мэйнтейнеров Entware собрать тестовый пакет с такой отладкой. Самому мне до этого не дотянуться.

Link to comment
Share on other sites

On 2/5/2018 at 3:41 PM, TheBB said:

с отладкой: minidlna_1.2.1-2a_mipsel-3x.ipk

Предложенная @sergeyk отладка вот что прояснила:

[2018/02/06 19:50:31] minidlna.c:1232: warn: Starting MiniDLNA version 1.2.1.
[2018/02/06 19:50:31] minidlna.c:437: warn: ret (0) != media_path->types (2), path = "/tmp/mnt/My Passport/Videos/TV Shows/Блудливая Калифорния"
[2018/02/06 19:50:31] minidlna.c:472: warn: New media_dir detected; rebuilding...
[2018/02/06 19:50:31] minidlna.c:1273: warn: HTTP listening on port 8200

Парсер посчитал, что это новый параметр media_dir в конфиге, хотя это не так. В базе до старта minidlna хорошо видно, что эта папка уже просканирована и имеет корректный TIMESTAMP = 2:

media_dir_db.png.5ed9158d3f6d8d63e05cb5dc54d6f266.png

Убрал этот media_dir из конфига, история повторилась теперь уже с Теория большого взрыва. Убрал и ее, только тогда ресканы базы сразу после старта minidlna прекратились.

Напрашивается только один вывод - minidlna по каким-то причинам не дружит с кириллическими символами в путях media_dir.

@TheBB @zyxmon @кто-нибудь-еще не могли бы подтвердить (или нет), когда время будет?

Link to comment
Share on other sites

8 минут назад, Sergey Zozulya сказал:

Напрашивается только один вывод - minidlna по каким-то причинам не дружит с кириллическими символами в путях media_dir.

Очень может быть. Никогда на верхнем уровне не использовал папки с кириллицей. И сорее всего вина тут на библиотеке sqlite (если дело в этом).

Link to comment
Share on other sites

1 minute ago, zyxmon said:

И сорее всего вина тут на библиотеке sqlite (если дело в этом).

Тоже к этому склоняюсь. Но проверить бы еще у кого-нибудь. Если повторится, то либо исправлять как-то (к кому вообще с этим?), либо забить (в моем случае больше не буду использовать кириллицу в конце путей).

Link to comment
Share on other sites

1 minute ago, Sergey Zozulya said:

Тоже к этому склоняюсь. Но проверить бы еще у кого-нибудь. Если повторится, то либо исправлять как-то (к кому вообще с этим?), либо забить (в моем случае больше не буду использовать кириллицу в конце путей).

Я проверю чуть позже.

Link to comment
Share on other sites

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...