duminică, 1 iulie 2012

Noi funcţii în TV-Maxe

Well, dezvoltarea aplicaţiilor Pymaxe şi TV-Maxe poate continua aşa că e timpul să ne punem pe treabă şi să pregătim viitoarele release-uri. În aceste zile am implementat două noi funcţii în TV-Maxe, funcţii care cred că vor fi foarte folositoare pentru utilizatorii acestuia:

1. Sleep timer
Fix ca televizorul tău (care acum probabil e plin de praf, hehe), TV-Maxe va putea să se închidă şi chiar să "tragă" şi calculatorul după el - adică să îl închidă şi pe acesta - dacă eşti utilizatorul unui mediu desktop compatibil (Gnome 3 (şi derivatele), Mate, XFCE şi KDE) sau dacă setezi shutdown -h now drept comandă de execuţie pentru închidere (e nevoie de nişte permisiuni aici, totuşi). Iar dacă ai o telecomandă pe infraroşii compatibilă, vei putea chiar să-ţi pui calculatorul la culcare stând în pat. Awesome, nu?

2. Reminder
Ţi s-a întâmplat vreodată să pierzi show-ul tău preferat deoarece erai prea concentrat cu configurarea bazei de date sau făceai back-up la log-uri? Ei bine acum poţi să setezi ca TV-Maxe să pornească automat la anumite ore, desigur după ce va afişa iniţial o întrebare gen "Chiar vrei să urmăreşti emisiunea asta? I mean, tipul ăla mănâncă insecte and shit...". Rezervările vor putea fi făcute cu un click dreapta pe o emisiune din ghidul TV sau prin accesarea manager-ului de rezervări din meniul principal al aplicaţiei. În felul ăsta TV-Maxe va porni un mic daemon (aghiazma la control!) care va urmări rezervările şi le va compara cu ora din sistem. Mare atenţie, acest mic daemon trebuie să ruleze pentru ca reminder-ul să funcţioneze, altfel doar cel din ceruri vă mai poate ajuta să nu rataţi nunta Esmeraldei cu Jose Armando.

3. Recording
TODO

Cei ce vor să trăiască la margine de prăpastie, pot folosi cu încredere svn checkout http://tv-maxe.googlecode.com/svn/trunk/ tv-maxe-read-only în timp ce ţin degetele încrucişate (musai!). Nu uitaţi să raportaţi eventualele bug-uri descoperite în timpul testării noilor funcţii. Baftă!

27 comentarii :

cristian spunea...

Punctul 3 se referă, că se pot face înregistrări ale emisiuniilor sau filmelor.

Dacă nu, atunci ar prinde bine o asemenea funcție.

Ovidiu Niţan spunea...

@cristian - da, despre asta e vorba.

Lupin spunea...

super :)

Anonim spunea...

Pentru viitor si o comanda de back, pentru postul anterior ciclic.

Anonim spunea...

As testa, dar nu-l pot rula nu-mi incarca libraria din schedule:


Traceback (most recent call last):
File "tvmaxe.py", line 35, in
import tools, keysim, scheduler, socketserver
File "/home/user/tv-maxe-read-only/scheduler.py", line 2, in
from daemon import TDaemon
ImportError: No module named daemon

Am modificat scriptul de lansare pentru tv-maxe, sa-mi ruleze din directorul curent, nu vreau sa suprascriu versiunea stabila.

Ovidiu Niţan spunea...

O să verific diseară ce se întâmplă. Poţi, totuşi, să postezi conţinutul scriptului de lansare şi directorul (calea completă) unde se află tv-maxe din SVN?

Marius spunea...

Adaugat variabila:
...
bindir=$PWD
...

Modificat functia tvmaxe:

launch_tvmaxe ()
{
cd $bindir
python tvmaxe.py
}

Calea este /home/user/tv-maxe-read-only
eu rulez scriptul din interiorul directorului, deci $PWD i-mi returneaza calea corecta.

Am incercat si cu python ./tvmaxe.py aceeasi problema

Ovidiu Niţan spunea...

Well, nu prea imi dau seama ce se intampla... poti sa imi spui daca exista vreun fisier in directorul "daemon"?

Marius spunea...

Da,

Toate fisierele sunt acolo:

marius:~/tv-maxe-read-only/daemon$ ls
daemon.py TDaemon.py tvmaxed.py

Ovidiu Niţan spunea...

Da, ştiu care e problema. Creează un fişier în daemon/, cu numele de __init__.py

Ovidiu Niţan spunea...

Fixat şi în SVN

Marius spunea...

Ok,

Porneste dar la lansare i-mi returneaza eroarea:
./tv-maxe
connect: No such file or directory

Functia de recurd nu merge cum trebuie, ma mai uit sa vad daca-mi pot da seama ce vrea.

Marius spunea...

Alte erori care apar constant:

tvmaxe.py:977: Warning: g_source_remove: assertion `tag > 0' failed
gobject.source_remove(self.keysimulator.src)
SopCast: Incoming port: 25984
SopCast: Outgoing port: 25813
libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 0) for PID 0
libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 0) for PID 66
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[0xa1b00cd8] main vout display error: Failed to resize display
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[0xa1b00cd8] main vout display error: Failed to resize display
[h264 @ 0xab4c5660] illegal short term buffer state detected
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!
[h264 @ 0xab4c5660] Missing reference picture
[0xa6c00720] main video output error: vlc_object_find_name("adjust") is not safe!

Marius spunea...

Erori in timpul lansarii capturii, se pare ca intra in loop si nu face nimic, e posibil sa fie de la codecuri .. ar fi de preferat sa fie embeded in aplicatie librariile, sau adaugate ca dependente la instalarile din distributiile de linux:


True
SopCast: Incoming port: 37090
SopCast: Outgoing port: 39208
Recording stream http://127.0.0.1:39208
ffmpeg -y -i http://127.0.0.1:39208 -acodec libmp3lame -ar 44100 -vcodec mpeg2video -f avi -sameq /tmp/tmpMGHMa8 file:///home/marius/2012_07_03-16_59_04.avi
ffmpeg version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Jun 12 2012 16:37:58 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[0xa1b13e68] main access error: connection failed: Connection refused
localhost.localdomain - - [03/Jul/2012 16:59:29] "GET / HTTP/1.1" 200 -
[h264 @ 0x8936100] non-existing PPS referenced
[h264 @ 0x8936100] non-existing PPS 0 referenced
[h264 @ 0x8936100] decode_slice_header error
[h264 @ 0x8936100] no frame!
....

[h264 @ 0x8936100] no frame!
[mpegts @ 0x892d220] max_analyze_duration reached
[mpegts @ 0x892d220] Estimating duration from bitrate, this may be inaccurate

Seems stream 1 codec frame rate differs from container frame rate: 2000000.00 (2000000/1) -> 25.00 (25/1)
Input #0, mpegts, from 'http://127.0.0.1:39208':
Duration: N/A, start: 81176.178278, bitrate: 128 kb/s
Program 1
Stream #0.0[0x44](???): Audio: mp2, 48000 Hz, stereo, s16, 128 kb/s
Stream #0.1[0x45](): Video: h264 (High), yuv420p, 716x446 [PAR 10:9 DAR 3580:2007], 25 tbr, 90k tbn, 2000k tbc
[buffer @ 0x8972740] w:716 h:446 pixfmt:yuv420p
[buffer @ 0x8980040] w:716 h:446 pixfmt:yuv420p
Incompatible sample format 's16' for codec 'ac3', auto-selecting format 'flt'
[ac3 @ 0x8999c00] invalid bit rate
Output #0, avi, to '/tmp/tmpMGHMa8':
Stream #0.0(): Video: mpeg2video, yuv420p, 716x446 [PAR 10:9 DAR 3580:2007], q=2-31, 200 kb/s, 90k tbn, 25 tbc
Stream #0.1(???): Audio: libmp3lame, 44100 Hz, stereo, s16, 200 kb/s
Output #1, avi, to 'file:///home/marius/2012_07_03-16_59_04.avi':
Stream #1.0(): Video: mpeg4, yuv420p, 716x446 [PAR 10:9 DAR 3580:2007], q=2-31, 200 kb/s, 90k tbn, 25 tbc
Stream #1.1(???): Audio: ac3, 48000 Hz, stereo, flt, 200 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Stream #0.1 -> #1.0
Stream #0.0 -> #1.1
Error while opening encoder for output stream #1.1 - maybe incorrect parameters such as bit_rate, rate, width or height
[0xa1b22230] main stream error: cannot pre fill buffer
tvmaxe.py:1405: GtkWarning: gtk_tree_model_filter_get_path: assertion `GTK_TREE_MODEL_FILTER (model)->priv->stamp == iter->stamp' failed
treeselection.select_iter(iter)
Stopped server
Stopped server
False
...
Si de aici intra in loop cu erorile de mai sus.

Marius spunea...

OK,

Erorile erau de la ffmpeg, eu am reusit sa-l fac sa mearga cu:

avconv -y -i http://127.0.0.1:[output port] -acodec libmp3lame -ar 44100 -vcodec mpeg4 -qscale 3 -f avi file:///cale_fisier.avi

-qscale e calitatea, valoarea 3 e rezonabila si calitativa dar ocupa mult spatiu, probabil o recopresie ar trebui dupa.

Nu inteleg dece cand lansezi comanda de record reface initializarea de stream, nu-i poti da sa faca record direct pe localhost si output port, fara reinitializare?!

Ovidiu Niţan spunea...

Ok...

connect: No such file or directory

habar n-am de la ce vine, apare şi la mine dar nu pare să afecteze funcţionarea programului.

Erorile de la VLC sunt normale, de când s-a trecut la 2.0 iar librăria de Python a rămas puţin în urmă.

Oricum, nu înţeleg de ce îţi spune că ffmpeg e deprecated - dar probabil că nu sunt eu la curent cu noutăţile şi chiar va fi înlocuit cu avconv ăla.

Mai departe pare-se că ffmpeg se închide pe motiv de parametri incorecţi. Lucru care de altfel nu mă miră, căci ffmpeg se comportă diferit de la un sistem de operare la altul şi chiar de la o distribuţie la alta. Dimensiunea fişierelor e cam mare datorită lui -sameq, probabil, care bagă un bitrate ameţitor. Mai sunt finisaje de făcut şi pe aici.

Nu pot pur şi simplu să captez ce vine de pe localhost din două mari motive:
1. dacă scriu pur şi simplu datele direct pe HDD nu mai avem headere iar fişierele video sunt oarecum corupte (nu se poate face seek pe mplayer, de exemplu)

2. nu toate backend-urile din TV-Maxe scot date pe HTTP

Marius spunea...

In Legatura cu pct. 1, mie-mi ies OK, lansat postul cu TV-MAXE, si apoi comanda de captura manual, fisierul intradevar e maricel dar macar e calitativ, am incercat si valori mai mari la -qscale dar calitatea e deplorabila.

Functia de sleep pare sa mearga OK, in Ubuntu am chiar si prompt de 60 sec.

Anonim spunea...

Am o problema dupa instalare am rulat tv-maxe in consola ,programul a pornit dar ind intru la preferinte nu se intampla nimic iar in consola afiseaza eroarea:

Traceback (most recent call last):
File "/usr/share/tv-maxe/settingsManager.py", line 111, in showGUI
self.updateWindow()
File "/usr/share/tv-maxe/settingsManager.py", line 206, in updateWindow
self.updateRecordingsLists()
File "/usr/share/tv-maxe/settingsManager.py", line 229, in updateRecordingsLists
for x in acodecs:
TypeError: 'NoneType' object is not iterable

Ovidiu Niţan spunea...

Ai ffmpeg instalat? Ce zice la:

ffmpeg -codecs

?

Anonim spunea...

Nu il aveam instalat .Lam instalat si acum merge. Mersi mult si felicitari pentru aplicatie. Instaland aceste codecuri sa rezolvat si alta problema care aparea si in versiunile mai vechi cu canalele in alt format de cat sob (nu porneau deloc).

Anonim spunea...

Revin cu alta problema cand incerc sa inregistrez un post tv nu merge fisierul nu apare canalul se incarca da nu am imagine. Precizez ca nici in setarile aplicatie nu pot modifica codecurile.

Ovidiu Niţan spunea...

Redescarcă versiunea din SVN. De asemenea, ia în seamă faptul că unele canale nu vor să se lase înregistrate (pe motiv de codecuri bulite - vezi cele de pe mediadirect).

Anonim spunea...

Ai putea specifica cu se face o descacare corect. Pentru ca eu cred ca nu am procedat corect. Preczez ca sunt incepator in linux.

Ovidiu Niţan spunea...

Tu cum ai procedat când ai descărcat această versiune? Întreb deoarece vreau să ştiu dacă ai descărcat din SVN sau ai instalat aplicaţia printr-un pachet.

Anonim spunea...

Am luat fiecare fisier si am creat fiecare folder apoi leam pus in locul directorului tv-maxe (cel anterior instalat). Daca ai pachetul .deb as fi foarte recunoscator daca mil lai da.

Am descarcat de aici: http://tv-maxe.googlecode.com/svn/trunk/

Anonim spunea...

http://3.bp.blogspot.com/-4bkI3sdXtOw/T_BoKbpZp4I/AAAAAAAABAM/XnQ3pQqs1zU/s1600/screenshot1.png
Ca si sistem de operare implicit ce folosesti?

Ovidiu Niţan spunea...

La momentul crearii screenshot-ului foloseam ArchLinux.