Page 1 of 1

How to save stream media info

Posted: 02 Jan 2007 11:55
by MartinT
Is there any way, how to save stream media info into txt(xml) file or better directly into id3 tag? If i use VLC to save raw stream, it saves only audio data. The media info is only displaying on status bar. My idea of txt file structure is like this:

00:00:00 Artist1 Song 1
hh:mm:ss Artist2 Song 2
....
....
....
....

The stream is AAC+

Posted: 02 Jan 2007 18:11
by VLC_help
The metadata (stream media info) can change during playback so it is little problematic (unless every change causes a new file to be created), but it is quite easy to implement (I am not sure if VLC can write tags).

Posted: 02 Jan 2007 18:39
by MartinT
The metadata (stream media info) can change during playback so it is little problematic (unless every change causes a new file to be created), but it is quite easy to implement (I am not sure if VLC can write tags).
I used some software that created new file when the change occured. But there was problem, that sometimes end of one song crossed the beginning of another song and the cut wasn`t ideal. In adittion to reencoding stream by this program i stop using it.
So it is better for me, have one big file and store for example in comment tag playlist with structure that i sketched out above.
So i search funcion, that can store all metadata occured during streaming in (txt) file.
I`m not sure but i think, that metadata aren`t included in audio data. So there must exists reader for it. Have you any suggestions how recognize this data?

Posted: 02 Jan 2007 19:47
by Tappen
I'm actually trying to do this with my C# wrapper for VLC right now. I can tell when the media information changes by hooking changes to the "playlist-current" variable of the playlist, but getting the media information out of VLC is like pulling teeth: unless you want to compile your own build of Vlc and add some C++ code there's no reliable way of getting at the data externally that I can see.

Posted: 03 Jan 2007 00:47
by MartinT
I'm not good in C++ programming.

I found partial solution to my problem with competitive player Mplayer.

Code: Select all

mplayer -dumpfile music.aac -dumpstream http://radio.address > playlist.txt
Now i have audio in music.aac file and metadata in playlist.txt file. Now it`s easy to extract with regular expression all songs descriptions.

Now i still search solution how to aad time information.

Posted: 03 Jan 2007 06:11
by Tappen
Well I figured out how to add this in C++/C# code, but the answer doesn't help you. I'd add this to the Feature Request forum, as I think it's a pretty good candidate for adding with the new playlist in 0.9.0.

I think there is a way of dumping out the debug messages in VLC which do contain updates to Now Playing meta-data. Is there a way to turn on timestamps for the message window and dump it for future parsing?

Posted: 03 Jan 2007 12:59
by MartinT
If i use

Code: Select all

mplayer http://radio.address > playlist.txt

and configure mplayer to display status line the output is like this:

Code: Select all

ICY Info: StreamTitle='aqua - my oh my (h2o club mix)';StreamUrl=''; A: 1.3 (01.3) of 0.0 (unknown) ??,?% 18% A: 1.3 (01.2) of 0.0 (unknown) 1.3% 22% A: 1.3 (01.3) of 0.0 (unknown) 2.0% 22% A: 1.3 (01.3) of 0.0 (unknown) 2.0% 22% A: 1.3 (01.3) of 0.0 (unknown) 2.0% 22% A: 1.3 (01.3) of 0.0 (unknown) 1.9% 22% ...... ..... .... A: 424.0 (07:03.9) of 0.0 (unknown) 1.1% 45% A: 424.0 (07:04.0) of 0.0 (unknown) 1.1% 45% A: 424.0 (07:04.0) of 0.0 (unknown) 1.1% 45% A: 424.0 (07:04.0) of 0.0 (unknown) 1.1% 45% ICY Info: StreamTitle='jam & spoon feat plavka - find me (odyssey to anyoona)';StreamUrl=''; A: 424.0 (07:04.0) of 0.0 (unknown) 1.1% 45% A: 424.0 (07:04.0) of 0.0 (unknown) 1.1% 45% A: 424.1 (07:04.0) of 0.0 (unknown) 1.1% 45% A: 424.1 (07:04.0) of 0.0 (unknown) 1.1% 45% .... .... ....
On console the status line is periodicaly overwriten, because each line starting with "A:" is terminated by /r, but in the playlist file are all this informations on one very long line, which is terminated when the new metadata come. So the file playlist is extremely big. If i filter the output and save only first e.g. 100 charakters of each line. An output would be like this:

Code: Select all

ICY Info: StreamTitle='aqua - my oh my (h2o club mix)';StreamUrl=''; A: 1.3 (01.3) of 0.0 (unknown) ??,?% 18% ICY Info: StreamTitle='jam & spoon feat plavka - find me (odyssey to anyoona)';StreamUrl=''; A: 424.0 (07:04.0) of 0.0 (unknown) 1.1% 45%
You can see that now you get easy approximative start time of each song. I have idea how to make it in Linux, but no idea in Windows.

Another problem is, that when i use

Code: Select all

mplayer -dumpfile music.aac -dumpstream http://radio.address > playlist.txt
then the status line is not displaying. Only "ICY Info:" But this is rather for Mplayer forum.
I don`t know if something like this works in VLC.

Posted: 03 Jan 2007 16:49
by MartinT
EDIT: After i installed sed for Windows.

I found solution for Mplayer but only when i play stream and status line is displayed. It look like this :

Code: Select all

mplayer http://radio.address | sed {s/^A:\(.\{20\}\).*$/ICY\1/} | findstr ^ICY > playlist.txt
Now the playlist.txt loks like this:

Code: Select all

ICY Info: StreamTitle='Enigma - Traces Light and Weight';StreamUrl=''; ICY 1.3 (01.2) of 0.0 ICY Info: StreamTitle='Mike Andrews - Song of the Spirits';StreamUrl=''; ICY 77.3 (01:17.3) of
So now i can easy write e.g.

Code: Select all

more playlist.txt | sed {s/^.*StreamTitle..\(.*\)..StreamUrl.*$/\1/} | sed {s/^.*(\(.*\)).*$/\1/} > out.txt
And the out.txt is now:

Code: Select all

Enigma - Traces Light and Weight 01.2 Mike Andrews - Song of the Spirits 01:17.3

Simple and elegant solution

Posted: 05 Jan 2007 11:59
by MartinT
The simplest solution to my problem is to use streamripper:

Code: Select all

streamripper http://stream.radio.address -A -a