Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam!
Czy jest jakis soft co by nagrywał radio internetowe i działał w konsoli? Chcę nagrać audycję ale mam dostęp tylko do konsoli.
Offline
Kiedyś z azhagiem potrzebowaliśmy stworzyć narzędzie do nagrywania strumienia radia internetowego. Było ono udoskonalane by rozwiązywało problemy które pojawiały się dopiero w trakcie jego używania. W efekcie radzi sobie z przerwanymi strumieniami, całość przekodowuje do Ogg V i wysyła powiadomienie na Jabbera. Wygląda mniej więcej tak:
#!/bin/bash # Skrypt do nagrywania audycji koncertowych w Radiowej Trójce # Autor: Mirosław "Minio" Zalewski <miniopl@gmail.com> http://minio.xt.pl # katalog na koncerty CEL=$HOME # Plik źródłowy. LISTA=$CEL/lista.txt # Plik logu LOG=$HOME/www/XXX/trojka-log ID=$RANDOM # Zmienna zawiera linijkę z dzisiejszym koncertem albo jest pusta # regexp jest tak sprytnie pomyślany, że sprawdza czy koncert jest dzisiaj i o tej właśnie godzinie. KONCERT=$(egrep "^$(date +%-e.%m.%Y).*$(date +%k)\.[0-9]{2} --.*" $LISTA) if [[ -z $KONCERT ]]; then # Dzisiaj nie ma żadnego koncertu, nie mamy tu czego szukać. exit; fi # Wyciąga minutę, o której zaczyna się koncert. MINUTA=$(echo "$KONCERT"| awk -F ' -- ' '{print $3}'| cut -d . -f 2) MINUTA=${MINUTA##0} TEMP=$(echo "$KONCERT"| awk -F ' -- ' '{print $NF}') if [ ${#TEMP} -le 3 ]; then JAK_DLUGO=$((TEMP + 3)) fi unset TEMP JAK_DLUGO=${JAK_DLUGO:-63} # Liczy różnicę pomiędzy teraz a chwilą rozpoczęcia koncertu - 1 # (w domyśle ma zaczynać nagrywanie wcześniej, aby nie ominąć ani chwili). # W zdecydowanej większości przypadków czeka ok. 4 minuty. if [[ $MINUTA -ne 0 ]]; then if [[ $(date +%M) -ne $(( MINUTA - 1)) ]]; then sleep $(( ( ( MINUTA - 1 ) - $(date +%M) ) * 60)) fi fi ARTIST=$(echo "$KONCERT" |tail -1 | awk -F ' -- ' '{print $2}') DESCR=$(echo "$KONCERT" |tail -1 | awk -F ' -- ' '{print $4}') I=0 echo -e "\n\nRozpoczynam logowanie nagrywania ${ARTIST}." >>"${LOG}" echo -e "Data: $(date +'%d.%m.%Y'). Godzina: $(date +'%H:%M')\n" >>"${LOG}" # Nagrywa przez tyle minut # (tutaj liczy różnicę między 63 a minutą rozpoczęcia koncertu. # Idea jest taka, żeby zacząć minutę przed i skończyć dwie minuty po.) sleep $(( JAK_DLUGO - MINUTA ))m & SLEEP_PID=$! # Gdyby nie ustawić tej zmiennej, w pętelce sprawdzałby czy istnieje # katalog /proc i w rezultacie nigdy nie rozpoczął nagrywania. # Przypisuje nieracjonalnie wysoką liczbę aby być pewnym, że taki proces # przypadkiem nie wystąpi w systemie. # (Po prostu nie mam pomysłu jak inaczej to zrobić, działa na słowo honoru) MPLAYER_PID=666894629430327204379 PROTOCOL=http # Pętelka. Tak długo jak istnieje proces sleep powyżej, sprawdza czy # istnieje proces mplayera. Jeżeli nie, uruchamia go. # Sprawdzanie wykonywane jest co pół minuty. while [ -e /proc/${SLEEP_PID} ]; do if [ ! -e /proc/${MPLAYER_PID} ]; then # ripuje stream mplayer -nolirc -vc dummy -vo null -ao pcm:file=$CEL/../audio-$ID-$((I++)).wav "${PROTOCOL}://stream.polskieradio.pl/program3" >/dev/null 2>>"${LOG}" & MPLAYER_PID=$! I=$((I + 1)) echo -e "\n$(date +'%H:%M'): mplayer nie działał. Uruchamiam.\n" >>"${LOG}" if [ ${PROTOCOL} = 'http' ]; then PROTOCOL=mms elif [ ${PROTOCOL} = 'mms' ]; then PROTOCOL=http fi fi sleep 30 done kill ${MPLAYER_PID} if [ $(ls $CEL/../audio-$ID-* |wc -l) -gt 1 ]; then echo -e "\n$(date +'%H:%M'): rozpoczynam łączenie plików wav\n" >>"${LOG}" sox $(ls -t --reverse $CEL/../audio-$ID-*) $CEL/../audio-$ID.wav else mv $(ls $CEL/../audio-$ID-*) $CEL/../audio-$ID.wav fi echo -e "\n$(date +'%H:%M'): rozpoczynam enkodowanie.\n" >>"${LOG}" # koduje do OGG V oggenc -q 3 -o "$CEL/$(date +%Y-%m/%Y.%m.%d)-$(echo $ARTIST| tr ' ' _ ).ogg" \ -a "$ARTIST" \ -t "Koncert w Radiowej Trójce -- $(date +%-e.%m\ %Y)" \ -l "Koncert w Radiowej Trójce -- $(date +%-e.%m\ %Y)" \ -d "$(date +%F)" \ -c "DESCRIPTION=$DESCR" $CEL/../audio-$ID.wav >/dev/null 2>>"${LOG}" echo "Zakończono logowanie o $(date +'%H:%M')" >>"${LOG}" echo -e "\n---------------------------------------\n" >>"${LOG}" # wysyła powiadomienia na Jabbera echo "Dostępny jest nowy koncert. Bezpośredni link do pobrania: http://tajnaStrona.pl/$(date +%Y-%m/%Y.%m.%d)-$(echo $ARTIST| tr ' ' _ ).ogg Szczegóły na http://tajnejStronie.pl (wiadomość generowana automagicznie, nie odpowiadaj na nią)" | \ sendxmpp -s "Nowy koncert: $ARTIST" -r "Powiadomienia" \ ktoś@gdzieś.net # Po skończonej pracy -- załóż maj... znaczy posprzątaj po sobie ;) rm $CEL/../audio-$ID*.wav
Offline
streamripper
uruchamiasz:
streamripper ip.stacji.radiowej
genialny skrypt :P jeszcze pod Państwową Wolną Komercyjną Stację, która wie co dobre ;)
Offline
a jak nagrać taki strumien
http://www.polskieradio.pl/sluchaj/play.aspx?p=r4
Offline
[quote=mihoo_koz]a jak nagrać taki strumien
http://www.polskieradio.pl/sluchaj/play.aspx?p=r4[/quote]
osadzony jest tam plik o takiej treści
<asx version = "3.0"> <entry> <ref href = "mms://stream.polskieradio.pl/program4"/> <ref href = "rtsp://stream.polskieradio.pl/program4"/> <ref href = "http://stream.polskieradio.pl/program4"/> <Title>Polskie Radio BIS</Title> <Author>Polskie Radio SA</Author> <Copyright>Polskie Radio SA</Copyright> <Banner></Banner> </entry> <Title>Polskie Radio BIS</Title> <Author>Polskie Radio SA</Author> <Copyright>Polskie Radio SA</Copyright> <Banner></Banner> <LogURL href = ""/> </asx>
teraz chyba oczywiste jak nagrać
Offline
Cześć.
Mam taki problem z powyższym skryptem, że podczas działania proces mplayera dopełnia zużycie procesora do 100% i to niezależnie czy w debianie stabilnym czy testowym.
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00089 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.21.21.209' WHERE u.id=1 |
0.00066 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.21.21.209', 1732676786) |
0.00045 | SELECT * FROM punbb_online WHERE logged<1732676486 |
0.00222 | DELETE FROM punbb_online WHERE ident='54.36.148.145' |
0.00054 | DELETE FROM punbb_online WHERE ident='54.36.148.255' |
0.00057 | DELETE FROM punbb_online WHERE ident='54.36.149.25' |
0.00046 | SELECT topic_id FROM punbb_posts WHERE id=134727 |
0.00169 | SELECT id FROM punbb_posts WHERE topic_id=15576 ORDER BY posted |
0.00065 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=15576 AND t.moved_to IS NULL |
0.00008 | SELECT search_for, replace_with FROM punbb_censoring |
0.00246 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=15576 ORDER BY p.id LIMIT 0,25 |
0.00079 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=15576 |
Total query time: 0.0116 s |