LINUX.ORG.RU
ФорумTalks

[ЖЖ] видео с youtube'а снова в /tmp

 


1

3

Несколько раз поднималась тема сохранения видео из flashplayer'а. Вот менее монстрообразный костыль.

unlinkfix.c:

// gcc -fPIC -c -o unlinkfix.o unlinkfix.c
// gcc -shared -o unlinkfix.so unlinkfix.o -ldl


#define _GNU_SOURCE
#include <dlfcn.h>
#define _FCNTL_H
#include <bits/fcntl.h>
#include <stdio.h>
#include <unistd.h>

extern int errno;

int (*_unlink)(const char *pathname);
int (*_fclose)(FILE *fp);


int unlink(const char *pathname){
    //printf("unlink `%s`\n", pathname);

    _unlink = (int (*)(const char *pathname)) dlsym(RTLD_NEXT, "unlink");
    if (!strncmp(pathname, "/tmp/FlashXX", 12)){
	return 0;
    }else{
	return _unlink(pathname);
    }
}

int fclose(FILE *fp){
    int fd = fileno(fp);
    char buf[4096];
    char fdpath[512];
    int len;
    
    //printf("fclose fd=%d, ", fd);
    _unlink = (int (*)(const char *pathname)) dlsym(RTLD_NEXT, "unlink");
    _fclose = (int (*)(FILE *fp)) dlsym(RTLD_NEXT, "fclose");
    sprintf(fdpath, "/proc/%d/fd/%d", getpid(), fd);
    len = readlink(fdpath, buf, 4096);
    if (len > 0){
	buf[len] = 0;
	//printf("`%s`", buf);
	if (!strncmp(buf, "/tmp/FlashXX", 12)){
	    //printf(", removing it");
	    _unlink(buf);
	}
	//printf("\n");
    }
    return _fclose(fp);
}

Makefile:

all:
	gcc -fPIC -c -o unlinkfix64.o unlinkfix.c
	gcc -shared -o unlinkfix64.so unlinkfix64.o -ldl
	gcc -m32 -fPIC -c -o unlinkfix32.o unlinkfix.c
	gcc -m32 -shared -o unlinkfix32.so unlinkfix32.o -ldl

Получившиеся .so загрузить через LD_PRELOAD.

Две версии нужны для плагинов разной разрядности.

★★★★★

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

>менее монстрообразный костыль

вы это серьезно?

leave ★★★★★
()
[kos@iVAIO ~]$ cat /usr/bin/watch-flash 
#!/bin/sh
PID=`ps x | grep libflashplayer.so | grep -v grep | awk '{print $1}'`
FD=`lsof -p $PID | grep Flash | awk '{print $4}' | sed 's/u//' | sed 's/w//'`
mplayer /proc/$PID/fd/$FD "$1"
[kos@iVAIO ~]$ 
Sonsee
()

Ох уж эти сишники, 20 строк кода и одно потенциальное разыменование NULL-а (ala краш фаерфокса) вместе с потенциальным переполнением буфера.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Не говоря уже о том, что это просто восхитительно - удалять файл при его fclose-е. Открыл конфиг, закрыл и нет конфига :)

Legioner ★★★★★
()

в чем сакральный смысл таких костылей, если уже сто лет как можно тумбочку переключить в хтмл5 и сохранять видео по правому клику?

kostian ★★★★☆
()
Ответ на: комментарий от Yareg

> А для чего подменять fclose?

Чтобы восстановить старое поведение: при закрытии вкладки браузера файл закрывается и его надо удалить.

i-rinat ★★★★★
() автор топика

напиши лучше на С проверку сообщений в одноклассниках
чтоб knotify выводил уведомление и чтоб можно было тут же ответить на него - будет круто.

Sonsee
()
Ответ на: комментарий от kostian

> в чем сакральный смысл таких костылей, если уже сто лет как можно тумбочку переключить в хтмл5 и сохранять видео по правому клику?

У youtube'a _все_ видео работают в html5? Или только те, что без рекламы?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Legioner

> Ох уж эти сишники, 20 строк кода и одно потенциальное разыменование NULL-а (ala краш фаерфокса) вместе с потенциальным переполнением буфера.

Напишите тест, исправлю дереференс.

Не говоря уже о том, что это просто восхитительно - удалять файл при его fclose-е. Открыл конфиг, закрыл и нет конфига :)

Вы храните конфиги в /tmp и их имена у вас начинаются на FlashXX ? Вот это восхитительно, да.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

А если открыто два вкладки с трубой?

не умею смотреть два видео одновременно

p.s. google -s flash pid proc

Sonsee
()
Ответ на: комментарий от Sonsee

> напиши лучше на С проверку сообщений в одноклассниках

По сабжу: нравится - забирай, не нравится - нет. Всё просто.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

По сабжу: нравится - забирай, не нравится - нет. Всё просто.

это значит, что не напишешь, или что однокласснике != религия?

Sonsee
()
Ответ на: комментарий от Sonsee

> это значит, что не напишешь, или что однокласснике != религия?

Я не состою в одноклассниках, не в курсе проблемы, не вижу смысла её решать, не знаю, как именно её решать, не буду её решать. Там что, нет rss?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от chinarulezzz

> сорри наверное за глупый вопрос, а в чем проблема? Видео же и так сохраняется, не?

Я привык, что почти все видео появляются в /tmp. С какой-то версии флеша они там появляться перестали.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Sonsee

> гуглить не умеем?

Эм, у меня уже нет этой проблемы, теперь файлы снова появляются в /tmp

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от kostian

> сделайте меня развидеть это

У меня opera, linux. Часть открывается через video, а часть через flash (как и это конкретное видео).

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Sonsee

Однокласснико-юзеры на моем ЛОРе? Нет пути 8(

nutz ★★
()

Во-первых, adobe flash не нужен и нормальные люди его не ставят, во-вторых, смотреть видео с youtube можно с помощью связки youtube-dl и mplayer без всяких костылей.

В третьих, для других сайтов тоже скрипты есть, я правда, не знаю, какой самый нормальный.

Xenius ★★★★★
()

А пользователи Оперы просто ставят Easy Youtube. :)

AX ★★★★★
()
Ответ на: комментарий от Xenius

> В третьих, для других сайтов тоже скрипты есть, я правда, не знаю, какой самый нормальный.

То есть мне надо выкинуть готовое работающее решение и идти искать идеологически правильные скрипты? Я правильно понял?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от lexxus-lex

> opera + youtube downloader - разве это так сложно?))))

11-я опера с расширениями вышла в январе 2011-го, а этим трюком я пользуюсь с конца ноября 2010-го. Не было тогда у оперы расширений.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

> и не занимайтесь сексом со своими и чужими мозгами

Два десятка строк всего. Это так, лёгкий флирт.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Xenius

> Использование проприетарного софта — это не решение, а лишь его суррогат.

А вы читали исходник того же youtube-dl? А исходники firefox'а, или чем вы там смотрите веб? Споры проприентарный / свободный уже давно перешли в плоскость верю / не верю.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Sonsee

>напиши лучше на С...

чтоб knotify...


успокойтесь, горячие финские парни :D

erfea ★★★★★
()
Ответ на: комментарий от Xenius

Тут я ожидал отрицательного ответа, после чего сделал бы так: «муах-ха-ха-ха!».

Рубеж в 3 тыс. строк перейдён. Желаю успехов в чтении исходников ядра (14,2 млн. строк) и firefox'а (7,3 млн. строк).

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

$ wc -l /usr/bin/youtube-dl
2478 /usr/bin/youtube-dl
Не перейдён же

Xenius ★★★★★
()
Ответ на: комментарий от i-rinat

>11-я опера с расширениями вышла в январе 2011-го, а этим трюком я пользуюсь с конца ноября 2010-го. Не было тогда у оперы расширений.

Да шо Ви травьете?!


Я расширениями не пользуюсь, есть же удобный java script:
http://operafan.net/forum/index.php?topic=3809.0



lexxus-lex ★★★
()
Ответ на: комментарий от Xenius

Я бы с радостью пользовался lightspark, если бы он не сегфолтился на каждый чих, или gnash, если бы он не был таким медленным. Я даже считаю, что они могли быть быстрее проприентарного. Но, к сожалению, там не просто пару глюков исправить надо, а вложить много времени квалифицированных специалистов.

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