Просмотр видео на Android по сети напрямую из папки Windows через NFS

Есть Android и куча видео в папке на компьютере с Windows. Как смотреть видео не перекачивая фильмы на SD-карту? Можно подключить папку напрямую. Но в ядре нет поддержки smbfs/cifs, зато есть поддержка nfs. Установим на Windows nfs сервер и подключим в Android папку с фильмами.

Для работы нам понадобится доступ к устройству через терминал. Можно поставить терминальную программку на Android, но отсутствие физической клавиатуры портит всё удовольствие. Поэтому воспользуемся утилитой adb из комплекта Android SDK.
Я не люблю подключать устройство через USB порт если есть WiFi. Но для работы adb по WiFi нужна утилита ADB over WiFi Widget (или adbWireless). Поставьте ее из маркета.
Добавьте виджет ADB over WiFi на домашний экран, ткните его. После некоторых раздумий виджет показывает нам куда нужно подключаться. В моем случае это: 192.168.0.35:8000. Подключаемся из Windows консоли и открываем консоль андроида:
C:\android-sdk-windows\tools>adb connect 192.168.0.35:8000
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
connected to 192.168.0.35:8000
C:\android-sdk-windows\tools>adb shell
#

Чтобы узнать какие файловые системы поддерживает ваше ядро выполним команду:
# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev tmpfs
nodev sockfs
nodev pipefs
nodev anon_inodefs
nodev rpc_pipefs
nodev inotifyfs
nodev devpts
ext3
ext2
cramfs
nodev ramfs
vfat
msdos
nodev nfs
romfs
yaffs
yaffs2
#

Как видим поддержка nfs присутствует.
Теперь установим nfs сервер. Для Windows существует несколько серверов как платных, так и бесплатных. Мы будем ставить сервер Cygwin.

Установка Cygwin nfs сервера

Скачиваем программу установки. Выбираем следующие пакеты: nfs-server, sunrpc, cygrunsrv. Еще желательно поставить редактор для правки файлов из консоли, например nano.
Открываем Cygwin Bash Shell, ссылка на него есть в главном меню Windows.
Добавляем в /etc/exports строку:
/cygdrive/c (rw,no_root_squash)

Теперь можно подключаться к любой папке на диске c:.

Отключаем наследование прав доступа NT. Для этого раскомментируем строку в /etc/fstab и добавим в опции noacl:
none /cygdrive cygdrive binary,noacl,posix=0,user 0 0

Для вступления настроек в силу загрываем консоль Cygwin и открываем её снова. Проверяем:
micdelt@station ~
$ mount
C:/cygwin/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin on / type ntfs (binary,auto)
C: on /cygdrive/c type ntfs (binary,noacl,posix=0,user,noumount,auto)

Опция noacl есть — порядок.

Запускаем установку сервисов.
micdelt@station ~
$ nfs-server-config

Скрипт будет задавать много вопросов. На все отвчаем да, кроме одного:
Do you want to run nfsd under a separate user account? (yes/no) no

Можно установить сервис и под административным аккаунтом, но у меня работает и под системным.
Скрипт установил три Windows-сервиса: portmap, nfsd, mountd. Запускаем их:
micdelt@station ~
$ cygrunsrv --start portmap

micdelt@station ~
$ cygrunsrv --start nfsd

micdelt@station ~
$ cygrunsrv --start mountd

Теперь на Windows работает nfs сервер.

Монтирование папок в Android


Ставим из маркета программку GScript Lite. Она умеет запускать скрипты и, к тому же, бесплатна.
Добавляем в программу два скрипта.

mount_video.sh — для подключения папки:
mkdir /sdcard/video
busybox mount -t nfs -o nolock,vers=2 192.168.0.2:/cygdrive/c/downloads/video /sdcard/video

В моем случае ip-адрес компа 192.168.0.2, видео папка расположена в c:\downloads\video, поменяйте скрипт в соответствии с вашими настройками.

umount_video.sh — для отключения:
busybox umount /sdcard/video

Можно вбить текст вручную в GScript, либо создать скрипты на компе и перенести с помощью adb.
Расскажу про второй способ. Допустим вы сохранили скрипты в папке C:\android-sdk-windows\tools, выполняем:
C:\android-sdk-windows\tools>adb shell mkdir /sdcard/gscript
C:\android-sdk-windows\tools>adb push mount_video.sh /sdcard/gscript/
C:\android-sdk-windows\tools>adb push umount_video.sh /sdcard/gscript/

Заходим в GScript на андроиде, добавляем скрипты, программа должна увидеть их.
Осталось только запустить mount_video.sh и вуаля, плейер может играть видео из /sdcard/video.

P.S. Все вышеприведенное тестировалось на планшете Zenithink ZT-180


1 комментарий

avatar
запускаю скрипт, пишет stderr: mount: RPC: Unable to receive: errno=connection refused

папке видео на компе нужно давать общий доступ? может изза того, что имя пользователя на компе Администратор (русскими буквами?)
куда копать?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.