Flash - записывающий от веб-камеры пользователя

В GNU / Linux почти все исполняемые файлы Go попадают в следующие категории:

  1. Те, которые включают в себя приложение, среду выполнения Go и статически связанную копию (части) glibc.
  2. Те, которые включают только приложение и среду выполнения Go, статически связаны, и ни один из glibc.
  3. Те, которые включают только приложение и среду выполнения Go, статически связаны и динамически связаны с glibc.

К сожалению, инструменты, связанные с ходом, часто объединяют их. Основная причина зависимости от glibc заключается в том, что приложение использует имя хоста и поиск пользователя (такие функции, как getaddrinfo и getpwuid_r). CGO_ENABLED=0 переключается с реализаций, подобных src/os/user/cgo_lookup_unix.go (использует glibc) на src/os/user/lookup_unix.go (не использует glibc). Реализация не-glibc не использует NSS и, таким образом, предлагает несколько ограниченные функциональные возможности (которые обычно не влияют на пользователей, которые не хранят пользовательскую информацию в LDAP / Active Directory).

В вашем случае настройка CGO_ENABLED=0 перемещает ваше приложение из третьей категории во вторую. (Существуют другие инструменты, связанные с Go, которые могут создавать приложения первого рода.) Код поиска, не относящийся к NSS, не очень велик, поэтому увеличение двоичного размера не является значительным. Поскольку среда выполнения Go уже была статически связана, даже возможно, что сокращение накладных расходов от статического связывания приведет к чистому уменьшению размера исполняемого файла.

Наиболее важная проблема, которую следует рассмотреть здесь, заключается в том, что NSS, потоки и статическое связывание не очень хорошо работают в glibc. Все программы Go являются многопоточными, и причиной (статически) связывания glibc с программами Go является именно доступ к функциям NSS. Поэтому статически связывать программы Go с glibc всегда неправильно. Это в основном всегда глючит . Даже если программы Go не были многопоточными, статически связанная программа, использующая функции NSS, нуждается в точно такой же версии glibc во время выполнения, которая использовалась во время сборки, поэтому статическое связывание такого приложения уменьшает портативность.

Все это причины, по которым приложения Go первого типа являются такой плохой идеей. Создание статически связанного приложения с использованием CGO_ENABLED=0 не имеет этих проблем, потому что эти приложения (второго типа) не содержат никакого кода glibc (за счет ограниченной функциональности функций поиска пользователя / хоста).

Если вы хотите создать переносимый двоичный файл, для которого требуется glibc, вам необходимо динамически связать ваше приложение (третий вид) в системе с самым старым glibc, который вы хотите поддерживать. Затем приложение будет работать на этой версии glibc и на всех более поздних версиях (на данный момент Go неправильно связывает libc , поэтому нет гарантии сильной совместимости даже для glibc). Дистрибутивы, как правило, совместимы с ABI, но имеют разные версии glibc. glibc делает все возможное, чтобы убедиться, что приложения, динамически связанные с более старыми версиями glibc, будут продолжать работать на новых версиях glibc, но обратное неверно: если вы связываете приложение с определенной версией glibc, оно может использовать функции (символы), которые просто недоступны в более старых версиях, поэтому приложение не будет работать с этими более старыми версиями.

7
задан Adam Davis 8 November 2008 в 15:14
поделиться

3 ответа

Существует несколько статей с примером кода для этого на сайте Adobe. Я рекомендовал бы Вам пройти это учебное руководство, поскольку оно будет вести Вас через все необходимые шаги наряду с примером кода:

http://www.adobe.com/devnet/flash/articles/webcam_motion.html

2
ответ дан 6 December 2019 в 21:21
поделиться

Попробуйте сервер Red5 RTMP (Java) и Red5-устройство-записи для записи и воспроизведения. Продемонстрируйте здесь: http://www.red5-recorder.com/demo.php

(Оба освобождают),

8
ответ дан 6 December 2019 в 21:21
поделиться

То, в чем Вы нуждаетесь, является Adobe Flash Media Интерактивный Сервер 3. Просто загрузите его и смотрите на "sample_guestbook" пример приложения.

0
ответ дан 6 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: