
Recherche avancée
Autres articles (38)
-
La file d’attente de SPIPmotion
28 novembre 2010, parUne file d’attente stockée dans la base de donnée
Lors de son installation, SPIPmotion crée une nouvelle table dans la base de donnée intitulée spip_spipmotion_attentes.
Cette nouvelle table est constituée des champs suivants : id_spipmotion_attente, l’identifiant numérique unique de la tâche à traiter ; id_document, l’identifiant numérique du document original à encoder ; id_objet l’identifiant unique de l’objet auquel le document encodé devra être attaché automatiquement ; objet, le type d’objet auquel (...) -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Contribute to documentation
13 avril 2011Documentation is vital to the development of improved technical capabilities.
MediaSPIP welcomes documentation by users as well as developers - including : critique of existing features and functions articles contributed by developers, administrators, content producers and editors screenshots to illustrate the above translations of existing documentation into other languages
To contribute, register to the project users’ mailing (...)
Sur d’autres sites (5642)
-
RAR Is Still A Contender
RAR (Roshal ARchive) is still a popular format in some corners of the internet. In fact, I procured a set of nearly 1500 RAR files that I want to use in a little project. But I didn’t want my program to have to operate directly on the RAR files which meant that I would need to recompress them to another format. Surely, one of the usual lossless compressors commonplace with Linux these days would perform better. Probably not gzip. Maybe not bzip2 either. Perhaps xz, though ?
Conclusion
At first, I concluded that xz beat RAR on every single file in the corpus. But then I studied the comparison again and realized it wasn’t quite apples to apples. So I designed a new experiment.New conclusion : RAR still beats xz on every sample in this corpus (for the record, the data could be described as executable program data mixed with reduced quality PCM audio samples).
Methodology
My experiment involved first reprocessing the archive files into a new resource archive file format and only compressing that file (rather than a set of files) using gzip, bzip2, xz, and rar at the maximum compression settings.echo filesize,gzip,bzip2,xz,rar,filename > compressed-sizes.csv for f in `ls /path/to/files/*` do gzip -9 —stdout $f > out.gz bzip2 -9 —stdout $f > out.bz2 xz -9 —stdout —check=crc32 $f > out.xz rar a -m5 out.rar $f stat —printf "%s," $f out.gz out.bz2 out.rar out.xz >> compressed-sizes.csv echo $f >> compressed-sizes.csv rm -f out.gz out.bz2 out.xz out.rar done
Note that xz gets the option
'--check=crc32'
since I’m using the XZ Embedded library which requires it. It really doesn’t make a huge different in filesize.Experimental Results
The preceding command line generates compressed-sizes.csv which goes into a Google Spreadsheet (export as CSV).Here are the full results of the bake-off, graphed :
That’s not especially useful. Here are the top 2 contenders compared directly :
Action
Obviously, I’m unmoved by the data. There is no way I’m leaving these files in their RAR form for this project, marginal space and bandwidth savings be darned. There are other trade-offs in play here. I know there is free source code available for decompressing RAR files but the license wouldn’t mesh well with GPL source code libraries that form the core of the same project. Plus, the XZ Embedded code is already integrated and painstakingly debugged.During this little exercise, I learned of a little site called Maximum Compression which takes experiments like the foregoing to their logical conclusion by comparing over 200 compression programs on a standard data corpus. According to the site’s summary page, there’s a library called PAQ8PX which posts the best overall scores.
-
Game Music Appreciation
16 juillet 2012, par Multimedia Mike — Game HackingA little over a year ago, I was prototyping a method to leverage Google Chrome’s Native Client technology in order to play old chiptunes (video game music) directly in a web browser. The last time I posted on the matter, I said that I might have something ready for public consumption by the time Google Chrome 21 rolled around. I thought I was being facetious but I wasn’t too far off. Chrome 20 is the current release version as I write this.
Anyway, I did it : I created a chiptune music player in Native Client by leveraging existing C/C++ libraries such as Game Music Emu, Audio Overload SDK, and Vio2sf. Then I packaged up the player into into a Google Chrome extension and published it on the Chrome Web Store. Then I made a website cataloging as many chiptunes as I could find for 7 different systems :
http://gamemusic.multimedia.cx/
Check it out if you have any affinity for old game music or you want to hear how music was made using a limited range of bleeps and bloops. Thus far, the site catalogs NES, SNES, Game Boy, Nintendo DS, Genesis, Saturn, and Dreamcast songs. I’m hoping to add support and catalogs for many more systems, though, eventually bringing support in line with the Chipamp plugin for Winamp.
-
Chrome times out on streaming FFMPEG output from ASP.NET Web Api
3 août 2014, par Hayden McAfeeI’ve got a unique problem here !
UPDATE 2 So it turns out the development below is FALSE, the inconsistency of the bug made it seem like not closing the stream made it work... but in fact the same issue persists !
UPDATE Interesting development ; if I comment outffmpegBufferedIn.Close();
below, the entire stream always goes through fine... the request just never ends. What could be going on here ?I’m writing a web service that stores audio files in Azure Blob Storage, and converts them to MP3 live when requested through my ASP.NET Web API endpoint. I accomplish this by using ’DownloadToStream’ via the Azure Storage API, feeding that stream through the STDIN of an FFMPEG process, and sending the STDOUT stream as the request response.
The block of code that does this looks like this :
public HttpResponseMessage Get(Guid songid)
{
// This could take awhile.
HttpContext.Current.Server.ScriptTimeout = 600;
Process ffmpeg = new Process();
ProcessStartInfo startinfo = new ProcessStartInfo(HostingEnvironment.MapPath("~/App_Data/executables/ffmpeg.exe"), "-i - -vn -ar 44100 -ac 2 -ab 192k -f mp3 - ");
startinfo.RedirectStandardError = true;
startinfo.RedirectStandardOutput = true;
startinfo.RedirectStandardInput = true;
startinfo.UseShellExecute = false;
startinfo.CreateNoWindow = true;
ffmpeg.StartInfo = startinfo;
ffmpeg.ErrorDataReceived += ffmpeg_ErrorDataReceived;
// Our response is a stream
var response = Request.CreateResponse();
response.StatusCode = HttpStatusCode.OK;
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("songs");
// Retrieve reference to a blob
CloudBlockBlob blockBlob = container.GetBlockBlobReference(songid.ToString());
ffmpeg.Start();
ffmpeg.BeginErrorReadLine();
// Buffer the streams
var ffmpegBufferedIn = new BufferedStream(ffmpeg.StandardInput.BaseStream);
var ffmpegBufferedOut = new BufferedStream(ffmpeg.StandardOutput.BaseStream);
blockBlob.DownloadToStreamAsync(ffmpegBufferedIn).ContinueWith((t) => {
ffmpegBufferedIn.Flush();
ffmpegBufferedIn.Close();
});
response.Content = new StreamContent(ffmpegBufferedOut);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("audio/mpeg");
System.Diagnostics.Debug.WriteLine("Returned response.");
return response;
}This works quite well in all browsers - all except for Chrome, which has an interesting way of buffering audio streams. Chrome will buffer the first 2 megabytes of a stream, then keep the connection open and wait until the user gets closer to playing the next segment of a file before consuming the rest of the stream. This should be fine - and for some songs it is. For others, I get this :
At first I thought this was due to some kind of timeout - But it happens at a different time and size for each file. It is consistent within about 15 seconds on the same songs, however. The output on the server side is normal - no exceptions thrown, and FFMpeg finishes encoding the song successfully.
Here’s the server-side output of the above request :
ffmpeg version N-64919-ga613257 Copyright (c) 2000-2014 the FFmpeg developers
built on Jul 23 2014 00:27:32 with gcc 4.8.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink --enable-zlib
libavutil 52. 92.101 / 52. 92.101
libavcodec 55. 69.100 / 55. 69.100
libavformat 55. 48.101 / 55. 48.101
libavdevice 55. 13.102 / 55. 13.102
libavfilter 4. 11.102 / 4. 11.102
libswscale 2. 6.100 / 2. 6.100
libswresample 0. 19.100 / 0. 19.100
libpostproc 52. 3.100 / 52. 3.100
Input #0, mp3, from 'pipe:':
Metadata:
TSRC : AUUM71001516
title : Sunlight
track : 2
artist : Bag Raiders
copyright : 2010 Modular Recordings
genre : Electronic
album : Bag Raiders
album_artist : Bag Raiders
disc : 1/1
publisher : Modular Recordings
composer : Chris Stracey/Jack Glass/Dan Black
date : 2010
Duration: N/A, start: 0.000000, bitrate: 320 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
Stream #0:1: Video: mjpeg, yuvj420p(pc, bt470bg), 600x600 [SAR 300:300 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
Metadata:
title :
comment : Other
Output #0, mp3, to 'pipe:':
Metadata:
TSRC : AUUM71001516
TIT2 : Sunlight
TRCK : 2
TPE1 : Bag Raiders
TCOP : 2010 Modular Recordings
TCON : Electronic
TALB : Bag Raiders
TPE2 : Bag Raiders
TPOS : 1/1
TPUB : Modular Recordings
TCOM : Chris Stracey/Jack Glass/Dan Black
TDRL : 2010
TSSE : Lavf55.48.101
Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, s16p, 192 kb/s
Metadata:
encoder : Lavc55.69.100 libmp3lame
Stream mapping:
Stream #0:0 -> #0:0 (mp3 (native) -> mp3 (libmp3lame))
size= 6kB time=00:00:00.21 bitrate= 227.6kbits/s
size= 102kB time=00:00:04.31 bitrate= 193.7kbits/s
size= 202kB time=00:00:08.56 bitrate= 192.9kbits/s
size= 341kB time=00:00:14.49 bitrate= 192.5kbits/s
size= 489kB time=00:00:20.82 bitrate= 192.4kbits/s
size= 642kB time=00:00:27.35 bitrate= 192.3kbits/s
size= 792kB time=00:00:33.75 bitrate= 192.2kbits/s
size= 950kB time=00:00:40.49 bitrate= 192.2kbits/s
size= 1106kB time=00:00:47.15 bitrate= 192.2kbits/s
size= 1258kB time=00:00:53.63 bitrate= 192.1kbits/s
size= 1415kB time=00:01:00.31 bitrate= 192.1kbits/s
size= 1563kB time=00:01:06.66 bitrate= 192.1kbits/s
size= 1710kB time=00:01:12.90 bitrate= 192.1kbits/s
size= 1857kB time=00:01:19.17 bitrate= 192.1kbits/s
size= 2008kB time=00:01:25.63 bitrate= 192.1kbits/s
size= 2162kB time=00:01:32.21 bitrate= 192.1kbits/s
size= 2299kB time=00:01:38.03 bitrate= 192.1kbits/s
size= 2457kB time=00:01:44.80 bitrate= 192.1kbits/s
size= 2600kB time=00:01:50.89 bitrate= 192.1kbits/s
size= 2755kB time=00:01:57.52 bitrate= 192.1kbits/s
size= 2864kB time=00:02:02.17 bitrate= 192.1kbits/s
size= 3022kB time=00:02:08.88 bitrate= 192.1kbits/s
size= 3172kB time=00:02:15.31 bitrate= 192.1kbits/s
size= 3284kB time=00:02:20.06 bitrate= 192.1kbits/s
size= 3385kB time=00:02:24.40 bitrate= 192.1kbits/s
size= 3529kB time=00:02:30.51 bitrate= 192.0kbits/s
size= 3687kB time=00:02:37.25 bitrate= 192.0kbits/s
size= 3838kB time=00:02:43.71 bitrate= 192.0kbits/s
size= 3988kB time=00:02:50.11 bitrate= 192.0kbits/s
size= 4138kB time=00:02:56.53 bitrate= 192.0kbits/s
size= 4279kB time=00:03:02.54 bitrate= 192.0kbits/s
size= 4408kB time=00:03:08.03 bitrate= 192.0kbits/s
size= 4544kB time=00:03:13.85 bitrate= 192.0kbits/s
size= 4683kB time=00:03:19.78 bitrate= 192.0kbits/s
size= 4805kB time=00:03:24.95 bitrate= 192.0kbits/s
size= 4939kB time=00:03:30.67 bitrate= 192.0kbits/s
size= 5049kB time=00:03:35.38 bitrate= 192.0kbits/s
size= 5141kB time=00:03:39.32 bitrate= 192.0kbits/s
size= 5263kB time=00:03:44.49 bitrate= 192.0kbits/s
size= 5372kB time=00:03:49.17 bitrate= 192.0kbits/s
The thread 0xb24 has exited with code 259 (0x103).
size= 5436kB time=00:03:51.91 bitrate= 192.0kbits/s
size= 5509kB time=00:03:55.02 bitrate= 192.0kbits/s
size= 5657kB time=00:04:01.32 bitrate= 192.0kbits/s
size= 5702kB time=00:04:03.22 bitrate= 192.0kbits/s
video:0kB audio:5701kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.005738%Any ideas ? I’m grateful for suggestions - I’ve been chasing this for a week now !