
Recherche avancée
Médias (1)
-
MediaSPIP Simple : futur thème graphique par défaut ?
26 septembre 2013, par
Mis à jour : Octobre 2013
Langue : français
Type : Video
Autres articles (111)
-
MediaSPIP Player : les contrôles
26 mai 2010, parLes contrôles à la souris du lecteur
En plus des actions au click sur les boutons visibles de l’interface du lecteur, il est également possible d’effectuer d’autres actions grâce à la souris : Click : en cliquant sur la vidéo ou sur le logo du son, celui ci se mettra en lecture ou en pause en fonction de son état actuel ; Molette (roulement) : en plaçant la souris sur l’espace utilisé par le média (hover), la molette de la souris n’exerce plus l’effet habituel de scroll de la page, mais diminue ou (...) -
Script d’installation automatique de MediaSPIP
25 avril 2011, parAfin de palier aux difficultés d’installation dues principalement aux dépendances logicielles coté serveur, un script d’installation "tout en un" en bash a été créé afin de faciliter cette étape sur un serveur doté d’une distribution Linux compatible.
Vous devez bénéficier d’un accès SSH à votre serveur et d’un compte "root" afin de l’utiliser, ce qui permettra d’installer les dépendances. Contactez votre hébergeur si vous ne disposez pas de cela.
La documentation de l’utilisation du script d’installation (...) -
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.
Sur d’autres sites (15093)
-
FFmpeg record and stream
16 janvier 2019, par RobertI’m getting the following error.
E/FFmpeg: Exception while trying to run:
[/data/user/0/com.example.pathways.testipcam/files/ffmpeg, -y, -i,
rtsp://log:pass@IP:port/video.h264, -acodec, copy, -vcodec, copy, -t,
00:03:00,
content://com.example.android.fileprovider/external_files/Android/data/com.example.pathways.testipcam/files/Movies/IPcam_20190116_150628_6019720208966811003.m>kv]
java.io.IOException: Cannot run program "/data/user/0/com.example.pathways.testipcam/files/ffmpeg": error=2, No such >file or directoryOK I’m trying to learn how to record and stream my IP cam on android. I can stream the video in a surface view media player no problem so I then went to the record task. Now I’m a bit lost. I know this is possible as I have read people say they used this to do it.
I started with implamenting
implementation 'nl.bravobit:android-ffmpeg:1.1.5'
But I can’t figure out what I am missing or doing wrong as there aren’t really any tutorials explaining this completely. So hopefully this can be the thread everyone else finds for a solution. I have listed my code below. Exactly what have I got wrong here. It runs and goes to onStart...then right on onFailure.
DO I need to have 2 streams in order to view and watch ? or what the deal.
I know FFmpeg can do that.
"ffmpeg supports multiple outputs created out of the same input(s) in the same process. The usual way to accomplish this is :ffmpeg -i input1 -i input2 \
-acodec … -vcodec … output1 \
-acodec … -vcodec … output2 \"but I have no idea how to sue that.
Anyway, I know I’m kind of close, at least I hope I need a little help on getting over the finish line on this. What have I done wrong, how does this work.Here is what I did, I streamed the video as the app does. no problem
surfaceView = (SurfaceView) findViewById(R.id.videoView);
_surfaceHolder = surfaceView.getHolder();
_surfaceHolder.addCallback(this);
_surfaceHolder.setFixedSize(320, 240);
....
@Override
public void surfaceCreated(SurfaceHolder holder) {
mpPlayerRun();
}
public void mpPlayerRun(){
_mediaPlayer = new MediaPlayer();
_mediaPlayer.setDisplay(_surfaceHolder);
try {
// Specify the IP camera's URL and auth headers.
_mediaPlayer.setDataSource(RTSP_URL);
// Begin the process of setting up a video stream.
_mediaPlayer.setOnPreparedListener(this);
_mediaPlayer.prepareAsync();
}
catch (Exception e) {}
}
...
@Override
public void onPrepared(MediaPlayer mp) {
_mediaPlayer.start();
}OK, so then I created a button to record.
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.IPcamback:
break;
case R.id.IPcamrecord:
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
takeIPvid();
} else {
requestIPCamPermission();
}.....
requested permission then results.
private void requestIPCamPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
new AlertDialog.Builder(this)
.setTitle("Permission needed")
.setMessage("This permission is needed do to android safety protocol")
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 420);
}
})
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();
} else {
ActivityCompat.requestPermissions(this,
new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 420);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 420) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
takeIPvid();
} else {
Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show();
}
.....then I made the file provider and createVideoOutputFile() method and the takeIPvid method.
private File createVideoOutputFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "IPcam_" + timeStamp + "_";
IPstorageDir = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
IPvideo_file = File.createTempFile(
imageFileName, /* prefix */
".mp4", /* suffix */
IPstorageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
String IPmVideoFilename = IPvideo_file.getAbsolutePath();
return IPvideo_file;
}
private void takeIPvid() {
File ipfile = null;
try {
ipfile = createVideoOutputFile();
} catch (IOException e) {
e.printStackTrace();
}
IPvideo_uri = FileProvider.getUriForFile(this,
"com.example.android.fileprovider",
ipfile);
String[] cmd = {"-y", "-i", "rtsp://Login:Passord@IP:port/video.h264", "-acodec", "copy", "-vcodec", "copy","-t","00:00:20", IPvideo_uri.toString() };
FFmpeg.getInstance(this).execute(cmd,new ExecuteBinaryResponseHandler(){
@Override
public void onStart() {
super.onStart();
}
@Override
public void onFailure(String message) {
super.onFailure(message);
}
@Override
public void onSuccess(String message) {
super.onSuccess(message);
}
@Override
public void onProgress(String message) {
super.onProgress(message);
}
@Override
public void onFinish() {
super.onFinish();
}
});
} -
Including ffmpeg in qt project on windows causes the program to unexpectedly finish
1er avril 2016, par Burn-ManI am trying to include ffmpeg in my qt project on windows. I am running QT4 and compiling with microsoft visual compiler 2010 on 32 bit windows 7. I am trying to include ffmpeg 2.8 which I got the dev and shared downloads from zeranoe. When I run it I get the following output :
Starting (executable path)...
The program has unexpectedly finished.
(executable path) exited with code -1073741819I am able to produce this output with the following :
ffmpeg_test.pro :
QT += core
TARGET = ffmpeg_test
INCLUDEPATH += (ffmpeg dev path)/include
LIBS += -L(ffmpeg dev path)/lib
LIBS += -lavformat
SOURCES += main.cppmain.cpp :
extern "C"
{
#ifndef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
#include <libavformat></libavformat>avformat.h>
}
int main(int argc, char *argv[])
{
av_register_all();
return 0;
}I have put the .dll files from the ffmpeg share bin into the same folder that QT builds ffmpeg_test.exe into. I have also confirmed that they are found using dependency walker which shows a question mark when they are not in that directory and the avformat-56.dll file path when they are (the fact that the .dll files are found does not effect the output of the program).
Dependency walker does reveal that something weird is going on as there are no expected functions, but the functions found in avformat-56.dll look correct. I also have ran Dumpbin.exe /EXPORTS on avformat.lib and it also looks fine (I can post output if it would be helpful). It is worth noting that I have included this version of ffmpeg in a different application on this machine, it was not a qt project however. That project generated its make file with CMake rather than QMake and was built with Microsoft Visual C++ 2010 rather than QT Creator.
I have also included other .lib/.dll pairs in qt and they have no problems. I am noticing two differences from those pairs. First in the ffmpeg-dev lib folder instead of having only .lib files (as is the case for all my other .lib/.dll pairs) I also have a .def and a .dll.a file for each library. Second ffmpeg is a c library whereas all my other included libraries are c++.
update 3/29 :
I have tried replacing the LIBS lines in my .pro with both of the following :
LIBS += (ffmpeg dev path)/lib/avformat.lib
LIBS += (ffmpeg dev path)/lib/libavformat.dll.a
Both give the same error message. I have also tried adding the following to my .pro file also with no effect.
DEFINES += __STDC_CONSTANT_MACROS
QMAKE_CXX_FLAGS += -D_STDC_CONSTANT_MACROS
Additionally I tried adding
#define inline __inline
to main.cpp as suggested on the ffmpeg website. Any ideas of things to try would be hugely appreciated !update 3/31 :
I have tried to start over with a new Windows build environment but the result remains unchanged with the test code above. (The new environment was able to run a hello world program).
My process for setting up this environment was to install a fresh version of 32 bit windows 7. Install Visual C++ 2010 Express from the Visual Studio 2010 Express All-in-one ISO. Install Qt 4.8.6 for 32 bit windows and Visual Studio 2010. And finally install Qt Creator 2.5.2. To set up Qt creator I went under tools->options and told it where to find the Qt 4.8.6 qmake. I downloaded the dev and shared builds for ffmpeg 2.8 from Zeranoe. I was missing stdint.h and inttypes so I downloaded them and put the files in /include/libavutil. Then I corrected any of the header files that complained from to "stdint.h" ect. I then put the dll files from ffmpeg-2.8-win32-shared/bin into the folder where qt was building ffmpeg_test ffmpeg_test-build-desktop-Qt_4_8_6__4_8_6__Release/release.
-
Heroic Defender of the Stack
27 janvier 2011, par Multimedia Mike — ProgrammingProblem Statement
I have been investigating stack smashing and countermeasures (stack smashing prevention, or SSP). Briefly, stack smashing occurs when a function allocates a static array on the stack and writes past the end of it, onto other local variables and eventually onto other function stack frames. When it comes time to return from the function, the return address has been corrupted and the program ends up some place it really shouldn’t. In the best case, the program just crashes ; in the worst case, a malicious party crafts code to exploit this malfunction.
Further, debugging such a problem is especially obnoxious because by the time the program has crashed, it has already trashed any record (on the stack) of how it got into the errant state.
Preventative Countermeasure
GCC has had SSP since version 4.1. The computer inserts SSP as additional code when the
-fstack-protector
command line switch is specified. Implementation-wise, SSP basically inserts a special value (the literature refers to this as the ’canary’ as in "canary in the coalmine") at the top of the stack frame when entering the function, and code before leaving the function to make sure the canary didn’t get stepped on. If something happens to the canary, the program is immediately aborted with a message to stderr about what happened. Further, gcc’s man page on my Ubuntu machine proudly trumpets that this functionality is enabled per default ever since Ubuntu 6.10.And that’s really all there is to it. Your code is safe from stack smashing by default. Or so the hand-wavy documentation would have you believe.
Not exactly
Exercising the SSP
I wanted to see the SSP in action to make sure it was a real thing. So I wrote some code that smashes the stack in pretty brazen ways so that I could reasonably expect to trigger the SSP (see later in this post for the code). Here’s what I learned that wasn’t in any documentation :
SSP is only emitted for functions that have static arrays of 8-bit data (i.e., [unsigned] chars). If you have static arrays of other data types (like, say, 32-bit ints), those are still fair game for stack smashing.
Evaluating the security vs. speed/code size trade-offs, it makes sense that the compiler wouldn’t apply this protection everywhere (I can only muse about how my optimization-obsessive multimedia hacking colleagues would absolute freak out if this code were unilaterally added to all functions). So why are only static char arrays deemed to be "vulnerable objects" (the wording that the gcc man page uses) ? A security hacking colleague suggested that this is probably due to the fact that the kind of data which poses the highest risk is arrays of 8-bit input data from, e.g., network sources.
The gcc man page also lists an option
-fstack-protector-all
that is supposed to protect all functions. The man page’s definition of "all functions" perhaps differs from my own since invoking the option does not have differ in result from plain, vanilla-fstack-protector
.The Valgrind Connection
"Memory trouble ? Run Valgrind !" That may as well be Valgrind’s marketing slogan. Indeed, it’s the go-to utility for finding troublesome memory-related problems and has saved me on a number of occasions. However, it must be noted that it is useless for debugging this type of problem. If you understand how Valgrind works, this makes perfect sense. Valgrind operates by watching all memory accesses and ensuring that the program is only accessing memory to which it has privileges. In the stack smashing scenario, the program is fully allowed to write to that stack space ; after all, the program recently, legitimately pushed that return value onto the stack when calling the errant, stack smashing function.
Valgrind embodies a suite of tools. My idea for an addition to this suite would be a mechanism which tracks return values every time a call instruction is encountered. The tool could track the return values in a separate stack data structure, though this might have some thorny consequences for some more unusual program flows. Instead, it might track them in some kind of hash/dictionary data structure and warn the programmer whenever a ’ret’ instruction is returning to an address that isn’t in the dictionary.
Simple Stack Smashing Code
Here’s the code I wrote to test exactly how SSP gets invoked in gcc. Compile with ’
gcc -g -O0 -Wall -fstack-protector-all -Wstack-protector stack-fun.c -o stack-fun
’.stack-fun.c :
C :-
/* keep outside of the stack frame */
-
static int i ;
-
-
void stack_smasher32(void)
-
{
-
int buffer32[8] ;
-
// uncomment this array and compile without optimizations
-
// in order to force this function to compile with SSP
-
// char buffer_to_trigger_ssp[8] ;
-
-
for (i = 0 ; i <50 ; i++)
-
buffer32[i] = 0xA5 ;
-
}
-
-
void stack_smasher8(void)
-
{
-
char buffer8[8] ;
-
for (i = 0 ; i <50 ; i++)
-
buffer8[i] = 0xA5 ;
-
}
-
-
int main()
-
{
-
// stack_smasher8() ;
-
stack_smasher32() ;
-
return 0 ;
-
}
The above incarnation should just produce the traditional "Segmentation fault". However, uncommenting and executing stack_smasher8() in favor of stack_smasher32() should result in "*** stack smashing detected *** : ./stack-fun terminated", followed by the venerable "Segmentation fault".
As indicated in the comments for stack_smasher32(), it’s possible to trick the compiler into emitting SSP for a function by inserting an array of at least 8 bytes (any less and SSP won’t emit, as documented, unless gcc’s ssp-buffer-size parameter is tweaked). This has to be compiled with no optimization at all (-O0) or else the compiler will (quite justifiably) optimize away the unused buffer and omit SSP.
For reference, I ran my tests on Ubuntu 10.04.1 with gcc 4.4.3 compiling the code for both x86_32 and x86_64.
-