
Recherche avancée
Autres articles (43)
-
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 (...) -
Ajouter des informations spécifiques aux utilisateurs et autres modifications de comportement liées aux auteurs
12 avril 2011, parLa manière la plus simple d’ajouter des informations aux auteurs est d’installer le plugin Inscription3. Il permet également de modifier certains comportements liés aux utilisateurs (référez-vous à sa documentation pour plus d’informations).
Il est également possible d’ajouter des champs aux auteurs en installant les plugins champs extras 2 et Interface pour champs extras. -
Possibilité de déploiement en ferme
12 avril 2011, parMediaSPIP peut être installé comme une ferme, avec un seul "noyau" hébergé sur un serveur dédié et utilisé par une multitude de sites différents.
Cela permet, par exemple : de pouvoir partager les frais de mise en œuvre entre plusieurs projets / individus ; de pouvoir déployer rapidement une multitude de sites uniques ; d’éviter d’avoir à mettre l’ensemble des créations dans un fourre-tout numérique comme c’est le cas pour les grandes plate-formes tout public disséminées sur le (...)
Sur d’autres sites (5345)
-
FFMPEG command on Android Jave Process does not fully execute
8 novembre 2014, par user2491598The issue I am having is very strange. I have an FFMPEG executable binary library installed on my Android and I am trying to execute this command
ffmpeg -loop 1 -i /storage/emulated/0/image.jpg -i /storage/emulated/0/input.mov -filter_complex '[0:v][1:v] overlay' -shortest /storage/emulated/0/output.mp4
and my JAVA code looks like
try {
Runtime.getRuntime().exec("chmod 700 " + mFfmpegPath);
cmd.add(mFfmpegPath);
cmd.add("-loop");
cmd.add("1");
cmd.add("-i");
cmd.add("/storage/emulated/0/image.jpg");
cmd.add("-i");
cmd.add("/storage/emulated/0/pizza.mov");
cmd.add("-filter_complex");
cmd.add("'[0:v][1:v] overlay'");
cmd.add("-shortest");
cmd.add("-vcodec");
cmd.add("-libx264");
cmd.add("-strict");
cmd.add("experimental");
cmd.add("/storage/emulated/0/output22.mp4");
final ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream();
final Process p = pb.start();
Log.i("FFMPEG","stdError= " + getSTD(p.getErrorStream()));
p.waitFor();
return run;
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}For some reason I the execution does not fully finish and it stops. It does not even create an output file in my Android storage. Here is the log file from the process stream
11-07 20:34:21.636: I/FFMPEG(6259): stdError= WARNING: linker: /data/data/za.jamie.androidffmpegcmdline/app_bin/ffmpeg has text relocations. This is wasting memory and is a security risk. Please fix.
11-07 20:34:21.636: I/FFMPEG(6259): ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
11-07 20:34:21.636: I/FFMPEG(6259): built on Nov 8 2014 00:21:33 with gcc 4.8 (GCC)
11-07 20:34:21.636: I/FFMPEG(6259): configuration: --target-os=linux --cross-prefix=/home/ubuntu/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/ubuntu/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-avcodec --enable-avformat --enable-swresample --enable-swscale --enable-postproc --enable-avfilter --enable-avresample --disable-libfreetype --enable-libfribidi --disable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --enable-ffplay --enable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/ubuntu/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/ubuntu/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/ubuntu/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/ubuntu/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
11-07 20:34:21.636: I/FFMPEG(6259): libavutil 54. 7.100 / 54. 7.100
11-07 20:34:21.636: I/FFMPEG(6259): libavcodec 56. 1.100 / 56. 1.100
11-07 20:34:21.636: I/FFMPEG(6259): libavformat 56. 4.101 / 56. 4.101
11-07 20:34:21.636: I/FFMPEG(6259): libavdevice 56. 0.100 / 56. 0.100
11-07 20:34:21.636: I/FFMPEG(6259): libavfilter 5. 1.100 / 5. 1.100
11-07 20:34:21.636: I/FFMPEG(6259): libavresample 2. 1. 0 / 2. 1. 0
11-07 20:34:21.636: I/FFMPEG(6259): libswscale 3. 0.100 / 3. 0.100
11-07 20:34:21.636: I/FFMPEG(6259): libswresample 1. 1.100 / 1. 1.100
11-07 20:34:21.636: I/FFMPEG(6259): libpostproc 53. 0.100 / 53. 0.100
11-07 20:34:21.636: I/FFMPEG(6259): Input #0, image2, from '/storage/emulated/0/image.jpg':
11-07 20:34:21.636: I/FFMPEG(6259): Duration: 00:00:00.04, start: 0.000000, bitrate: 35211 kb/s
11-07 20:34:21.636: I/FFMPEG(6259): Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg), 640x640 [SAR 1:1 DAR 1:1], 25 fps, 25 tbr, 25 tbn, 25 tbc
11-07 20:34:21.636: I/FFMPEG(6259): Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/input.mov':
11-07 20:34:21.636: I/FFMPEG(6259): Metadata:
11-07 20:34:21.636: I/FFMPEG(6259): major_brand : qt
11-07 20:34:21.636: I/FFMPEG(6259): minor_version : 537199360
11-07 20:34:21.636: I/FFMPEG(6259): compatible_brands: qt
11-07 20:34:21.636: I/FFMPEG(6259): creation_time : 2014-10-30 23:57:31
11-07 20:34:21.636: I/FFMPEG(6259): xmp : <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
11-07 20:34:21.636: I/FFMPEG(6259): :
11-07 20:34:21.636: I/FFMPEG(6259): :
11-07 20:34:21.636: I/FFMPEG(6259): : FFMPEG(6259): : xmlns:xmp="http://ns.adobe.com/xap/1.0/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:creatorAtom="http://ns.adobe.com/creatorAtom/1.0/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:dc="http://purl.org/dc/elements/1.1/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmp:CreateDate="2014-10-30T16:57:31-07:00"
11-07 20:34:21.636: I/FFMPEG(6259): : xmp:ModifyDate="2014-10-30T15:57:57-07:00"
11-07 20:34:21.636: I/FFMPEG(6259): : xmp:CreatorTool="Adobe After Effects CC 2014 (Windows)"
11-07 20:34:21.636: I/FFMPEG(6259): : xmp:MetadataDate="2014-10-30T15:57:57-07:00"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:startTimeScale="30"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:startTimeSampleSize="1"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:videoFrameRate="30.000000"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:videoFieldOrder="Progressive"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:videoPixelAspectRatio="1/1"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:audioSampleRate="48000"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:audioSampleType="16Int"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:audioChannelType="Stereo"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpMM:InstanceID="xmp.iid:b791d2dc-6759-ee45-b5a2-692ecba2c4fd"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpMM:DocumentID="xmp.did:d3fde073-8716-144a-acbd-7676f27002a0"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpMM:OriginalDocumentID="xmp.
11-07 20:34:21.836: E/ViewRootImpl(6259): sendUserActionEvent() mView == nullPlease help :(
-
FFMPEG command on Android Jave Process does fully execute
8 novembre 2014, par user2491598The issue I am having is very strange. I have an FFMPEG executable binary library installed on my Android and I am trying to execute this command
ffmpeg -loop 1 -i /storage/emulated/0/image.jpg -i /storage/emulated/0/input.mov -filter_complex '[0:v][1:v] overlay' -shortest /storage/emulated/0/output.mp4
and my JAVA code looks like
try {
Runtime.getRuntime().exec("chmod 700 " + mFfmpegPath);
cmd.add(mFfmpegPath);
cmd.add("-loop");
cmd.add("1");
cmd.add("-i");
cmd.add("/storage/emulated/0/image.jpg");
cmd.add("-i");
cmd.add("/storage/emulated/0/pizza.mov");
cmd.add("-filter_complex");
cmd.add("'[0:v][1:v] overlay'");
cmd.add("-shortest");
cmd.add("-vcodec");
cmd.add("-libx264");
cmd.add("-strict");
cmd.add("experimental");
cmd.add("/storage/emulated/0/output22.mp4");
final ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream();
ProcessRunnable run = new ProcessRunnable(pb);
final Process p = pb.start();
Log.i("FFMPEG","stdError= " + getSTD(p.getErrorStream()));
p.waitFor();
return run;
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}For some reason I the execution does not fully finish and it stops. It does not even create an output file in my Android storage. Here is the log file from the process stream
11-07 20:34:21.636: I/FFMPEG(6259): stdError= WARNING: linker: /data/data/za.jamie.androidffmpegcmdline/app_bin/ffmpeg has text relocations. This is wasting memory and is a security risk. Please fix.
11-07 20:34:21.636: I/FFMPEG(6259): ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
11-07 20:34:21.636: I/FFMPEG(6259): built on Nov 8 2014 00:21:33 with gcc 4.8 (GCC)
11-07 20:34:21.636: I/FFMPEG(6259): configuration: --target-os=linux --cross-prefix=/home/ubuntu/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/ubuntu/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-avcodec --enable-avformat --enable-swresample --enable-swscale --enable-postproc --enable-avfilter --enable-avresample --disable-libfreetype --enable-libfribidi --disable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --enable-ffplay --enable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/ubuntu/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/ubuntu/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/ubuntu/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/ubuntu/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
11-07 20:34:21.636: I/FFMPEG(6259): libavutil 54. 7.100 / 54. 7.100
11-07 20:34:21.636: I/FFMPEG(6259): libavcodec 56. 1.100 / 56. 1.100
11-07 20:34:21.636: I/FFMPEG(6259): libavformat 56. 4.101 / 56. 4.101
11-07 20:34:21.636: I/FFMPEG(6259): libavdevice 56. 0.100 / 56. 0.100
11-07 20:34:21.636: I/FFMPEG(6259): libavfilter 5. 1.100 / 5. 1.100
11-07 20:34:21.636: I/FFMPEG(6259): libavresample 2. 1. 0 / 2. 1. 0
11-07 20:34:21.636: I/FFMPEG(6259): libswscale 3. 0.100 / 3. 0.100
11-07 20:34:21.636: I/FFMPEG(6259): libswresample 1. 1.100 / 1. 1.100
11-07 20:34:21.636: I/FFMPEG(6259): libpostproc 53. 0.100 / 53. 0.100
11-07 20:34:21.636: I/FFMPEG(6259): Input #0, image2, from '/storage/emulated/0/image.jpg':
11-07 20:34:21.636: I/FFMPEG(6259): Duration: 00:00:00.04, start: 0.000000, bitrate: 35211 kb/s
11-07 20:34:21.636: I/FFMPEG(6259): Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg), 640x640 [SAR 1:1 DAR 1:1], 25 fps, 25 tbr, 25 tbn, 25 tbc
11-07 20:34:21.636: I/FFMPEG(6259): Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/input.mov':
11-07 20:34:21.636: I/FFMPEG(6259): Metadata:
11-07 20:34:21.636: I/FFMPEG(6259): major_brand : qt
11-07 20:34:21.636: I/FFMPEG(6259): minor_version : 537199360
11-07 20:34:21.636: I/FFMPEG(6259): compatible_brands: qt
11-07 20:34:21.636: I/FFMPEG(6259): creation_time : 2014-10-30 23:57:31
11-07 20:34:21.636: I/FFMPEG(6259): xmp : <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
11-07 20:34:21.636: I/FFMPEG(6259): :
11-07 20:34:21.636: I/FFMPEG(6259): :
11-07 20:34:21.636: I/FFMPEG(6259): : FFMPEG(6259): : xmlns:xmp="http://ns.adobe.com/xap/1.0/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:creatorAtom="http://ns.adobe.com/creatorAtom/1.0/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmlns:dc="http://purl.org/dc/elements/1.1/"
11-07 20:34:21.636: I/FFMPEG(6259): : xmp:CreateDate="2014-10-30T16:57:31-07:00"
11-07 20:34:21.636: I/FFMPEG(6259): : xmp:ModifyDate="2014-10-30T15:57:57-07:00"
11-07 20:34:21.636: I/FFMPEG(6259): : xmp:CreatorTool="Adobe After Effects CC 2014 (Windows)"
11-07 20:34:21.636: I/FFMPEG(6259): : xmp:MetadataDate="2014-10-30T15:57:57-07:00"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:startTimeScale="30"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:startTimeSampleSize="1"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:videoFrameRate="30.000000"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:videoFieldOrder="Progressive"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:videoPixelAspectRatio="1/1"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:audioSampleRate="48000"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:audioSampleType="16Int"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpDM:audioChannelType="Stereo"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpMM:InstanceID="xmp.iid:b791d2dc-6759-ee45-b5a2-692ecba2c4fd"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpMM:DocumentID="xmp.did:d3fde073-8716-144a-acbd-7676f27002a0"
11-07 20:34:21.636: I/FFMPEG(6259): : xmpMM:OriginalDocumentID="xmp.
11-07 20:34:21.836: E/ViewRootImpl(6259): sendUserActionEvent() mView == nullPlease help :(
-
How to make your plugin multilingual – Introducing the Piwik Platform
29 octobre 2014, par Thomas Steur — DevelopmentThis is the next post of our blog series where we introduce the capabilities of the Piwik platform (our previous post was Generating test data – Introducing the Piwik Platform). This time you’ll learn how to equip your plugin with translations. Users of your plugin will be very thankful that they can use and translate the plugin in their language !
Getting started
In this post, we assume that you have already set up your development environment and created a plugin. If not, visit the Piwik Developer Zone where you’ll find the tutorial Setting up Piwik and other Guides that help you to develop a plugin.
Managing translations
Piwik is available in over 50 languages and comes with many translations. The core itself provides some basic translations for words like “Visitor” and “Help”. They are stored in the directory
/lang
. In addition, each plugin can provide its own translations for wordings that are used in this plugin. They are located in/plugins/*/lang
. In those directories you’ll find one JSON file for each language. Each language file consists in turn of tokens that belong to a group.{
"MyPlugin":{
"BlogPost": "Blog post",
"MyToken": "My translation",
"InteractionRate": "Interaction Rate"
}
}A group usually represents the name of a plugin, in this case “MyPlugin”. Within this group, all the tokens are listed on the left side and the related translations on the right side.
Building a translation key
As you will later see to actually translate a word or a sentence you’ll need to know the corresponding translation key. This key is built by combining a group and a token separated by an underscore. You can for instance use the key
MyPlugin_BlogPost
to get a translation of “Blog post”. Defining a new key is as easy as adding a new entry to the “MyPlugin” group.Providing default translations
If a translation cannot be found then the English translation will be used as a default. Therefore, you should always provide a default translation in English for all keys in the file
en.json
(ie,/plugins/MyPlugin/lang/en.json
).Adding translations for other languages
This is as easy as creating new files in the lang subdirectory of your plugin. The filename consists of a 2 letter ISO 639-1 language code completed by the extension
.json
. This means German translations go into a file namedde.json
, French ones into a file namedfr.json
. To see a list of languages you can use have a look at the /lang directory.Reusing translations
As mentioned Piwik comes with quite a lot of translations. You can and should reuse them but you are supposed to be aware that a translation key might be removed or renamed in the future. It is also possible that a translation key was added in a recent version and therefore is not available in older versions of Piwik. We do not currently announce any of such changes. Still, 99% of the translation keys do not change and it is therefore usually a good idea to reuse existing translations. Especially when you or your company would otherwise not be able to provide them. To find any existing translation keys go to Settings => Translation search in your Piwik installation. The menu item will only appear if the development mode is enabled.
Translations in PHP
Use the Piwik::translate() function to translate any text in PHP. Simply pass any existing translation key and you will get the translated text in the language of the current user in return. The English translation will be returned in case none for the current language exists.
$translatedText = Piwik::translate('MyPlugin_BlogPost');
Translations in Twig Templates
To translate text in Twig templates, use the translate filter.
{{ 'MyPlugin_BlogPost'|translate }}
Contributing translations to Piwik
Did you know you can contribute translations to Piwik ? In case you want to improve an existing translation, translate a missing one or add a new language go to Piwik Translations and sign up for an account. You won’t need any knowledge in development to do this.
Advanced features
Of course there are more useful things you can do with translations. For instance you can use placeholders like
%s
in your translations and you can use translations in JavaScript as well. In case you want to know more about those topics check out our Internationalization guide. Currently, this guide only covers translations but we will cover more topics like formatting numbers and handling currencies in the future.Congratulations, you have learnt how to make your plugin multilingual !
If you have any feedback regarding our APIs or our guides in the Developer Zone feel free to send it to us.