
Recherche avancée
Médias (1)
-
The pirate bay depuis la Belgique
1er avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
Autres articles (59)
-
Keeping control of your media in your hands
13 avril 2011, parThe vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...) -
Les vidéos
21 avril 2011, parComme les documents de type "audio", Mediaspip affiche dans la mesure du possible les vidéos grâce à la balise html5 .
Un des inconvénients de cette balise est qu’elle n’est pas reconnue correctement par certains navigateurs (Internet Explorer pour ne pas le nommer) et que chaque navigateur ne gère en natif que certains formats de vidéos.
Son avantage principal quant à lui est de bénéficier de la prise en charge native de vidéos dans les navigateur et donc de se passer de l’utilisation de Flash et (...) -
(Dés)Activation de fonctionnalités (plugins)
18 février 2011, parPour gérer l’ajout et la suppression de fonctionnalités supplémentaires (ou plugins), MediaSPIP utilise à partir de la version 0.2 SVP.
SVP permet l’activation facile de plugins depuis l’espace de configuration de MediaSPIP.
Pour y accéder, il suffit de se rendre dans l’espace de configuration puis de se rendre sur la page "Gestion des plugins".
MediaSPIP est fourni par défaut avec l’ensemble des plugins dits "compatibles", ils ont été testés et intégrés afin de fonctionner parfaitement avec chaque (...)
Sur d’autres sites (7997)
-
ffmpeg - mp4 video created from images not rendered in browser [on hold]
6 mai 2014, par mast kalandarUsing PHP (Symfony) I have extracted set of frames from a video using
ffmpeg
. Following is the command I’ve used :ffmpeg -i f1.mp4 f%d.jpg
Total 30 frames were created, each one of 1920 x 1020 pixels
I have added some text in those frames and created one video
(without changing dimension of any frames)ffmpeg -f image2 -r 30 -i f%d.png -r 30 -b:v 5458k my.mp4
When I try to render this mp4 file in video tag (Chromium & Mozilla Firefox), it is not getting render, however other normal mp4 videos are getting render properly.
Strange thing is when I open this video directly
(http://localhost/MyProject/web/video/user_videos/my.mp4)
in Mozilla Firefox, it is getting played in screen properly, however not in Chromium.What is the problem here ??
Do I need to add one second audio as well to my.mp4 file ?
Kindly suggest if any thing is missing ??
-
Launch Symfony 4 command from controller works on dev but not in prod environment
14 août 2019, par JoakDAWhen an application loads, I make 2 AJAX request to start 2 proccess needed for showing a RTSP video streaming on the website.
It is working great in DEV environment but making some tests in PROD, it only works if the page is loaded on the server webbrowser (same host where the application is installed).
If I use an external browser installed on another machine, it doesn’t launch the video.
If I use an external browser installed on another machine, it doesn’t launch the video.
/**
* Start transcoding video.
* @param Request $request
* @return Response
* @Route("devices/show/videotranscoding", name="start_video_transcoding", methods={"POST"})
* @IsGranted("ROLE_OPERATOR")
*/
public function startTranscodingVideo(Request $request)
{
$value = '';
try {
//Setup needed variables
$this->initialize();
$this->logger->info('Start Video transcoding: Ok. Video started successfully');
//Get device id from POST data
$deviceid = $request->request->get('deviceid');
//Find device to show from system
$deviceToShow = $this->repository->find($deviceid);
if ($deviceToShow) {
$this->logger->info('Start Video transcoding: . Device has been found. Delete it... Data: ' . $deviceToShow->__toString());
$realHost = $this->getRealHost($_SERVER['HTTP_HOST']);
$tcpHost = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$realHost}";
//Launch transcoding command
$transcodingCommand = 'php ' . $this->getParameter('kernel.project_dir') . '/bin/console device:videotranscoding ' .
'rtsp://' . $deviceToShow->getUsername() . ':' . $deviceToShow->getPassword() . '@' . str_replace('http://', '', $deviceToShow->getHost()) . ':' . $deviceToShow->getRTSPPort() . ' ' .
str_replace(' ', '', $deviceToShow->getName()) . ' ' . $tcpHost . ' ' . $deviceToShow->getVideoHTTPPort();
$transcodingProcess = \Symfony\Component\Process\Process::fromShellCommandline($transcodingCommand);
$transcodingProcess->start();
$success = true;
$message = '';
} else {
$message = $this->translator->trans('Device with identifier %deviceid% was not found.',
['%deviceid%' => $deviceid]);
$success = false;
$this->addFlash('error', $message);
$this->logger->error('Start Video transcoding: Ko. Device with identifier ' . $deviceid . ' was not found.');
}
} catch (Throwable $exception) {
$message = $this->translator->trans('Error while executing action. Error detail: %detail%.',
['%detail%' => $exception->getMessage()]);
$this->addFlash(
'error', $message
);
$success = false;
$this->logger->critical('Start Video transcoding: Ko. Exception catched. Error detail: ' . $exception->getMessage());
}
$this->logger->info('Start Video transcoding: Ok. Video started successfully');
return new JsonResponse(array(
'success' => $success,
'message' => $message,
'value' => $value
));
}I have a nodejs script executing in background to listen o a specific port to broadcast the data on the TCP port to a websocket server.
The ffmpeg command transcodes the RTSP stream and sent to port TCP 8102 and broadcast the data to a websocket server listening on port 8105.
The transcoding command code :
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int|void|null
* @throws \Exception
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
try {
$this->logger->info('Start video transcoding: Setup video transcoding...');
$io = new SymfonyStyle($input, $output);
$now = new \DateTime();
$io->title('Start video transcoding at ' . $now->format('d-m-Y G:i:s') . '...');
//Get input parameters
$rtspUri = $input->getArgument('rtsp');
$secret = $input->getArgument('secret');
$portsString = $input->getArgument('tcp_port');
$tcpHost = $input->getArgument('tcp_host');
$this->logger->debug('Start video transcoding: RTSP: "' . $rtspUri . '". TCP Port: ' . $portsString);
//Absolute path to logs
$logPath = $this->path . DIRECTORY_SEPARATOR . 'var' . DIRECTORY_SEPARATOR . 'log';
$stdOutPath = $logPath . DIRECTORY_SEPARATOR . 'transcoding_out.log';
$stdErrrorPath = $logPath . DIRECTORY_SEPARATOR . 'transcoding_error.log';
//FFMPEG
$arguments = '-nostdin -t 00:01:00 -rtsp_transport tcp -i ' . $rtspUri . ' -f mpegts -codec:v mpeg1video -s 1920x1080 -b:v 800k -r 30 -bf 0 ' . $tcpHost . ':' . $portsString . '/' . $secret . ' > '
. $stdOutPath . ' 2> ' . $stdErrrorPath . ' &';
$ffmpegParams = '/usr/bin/ffmpeg ' . $arguments;
//$ffmpegProcess = new Process($ffmpegParams);
$ffmpegProcess = \Symfony\Component\Process\Process::fromShellCommandline($ffmpegParams);
$ffmpegProcess->setTimeout(60);
$ffmpegProcess->setIdleTimeout(60);
try {
$ffmpegProcess->start();
$this->logger->info('Start video transcoding: OK. Video streaming successfully started...');
$io->success('Start video transcoding: OK. Video streaming successfully started...');
}catch (ProcessTimedOutException $timedOutException){
$ffmpegProcess->stop(3, SIGINT);
$this->io->success('Start video transcoding: Ko. Transcoding finished with error.');
}
} catch (Throwable $exception) {
$message = 'Start video transcoding: Ko. Exception catched. Error detail: ' . $exception->getMessage();
$this->logger->critical($message);
$io->error($message);
}
}The node.js code (got from here JSMpeg – MPEG1 Video & MP2 Audio Decoder in JavaScript :
// Use the websocket-relay to serve a raw MPEG-TS over WebSockets. You can use
// ffmpeg to feed the relay. ffmpeg -> websocket-relay -> browser
// Example:
// node websocket-relay yoursecret 8081 8082
// ffmpeg -i <some input="input"> -f mpegts http://localhost:8081/yoursecret
var fs = require('fs'),
http = require('http'),
WebSocket = require('ws');
if (process.argv.length < 3) {
console.log(
'Usage: \n' +
'node websocket-relay.js <secret> [ ]'
);
console.log(process.cwd());
process.exit();
}
var STREAM_SECRET = process.argv[2],
STREAM_PORT = process.argv[3] || 8081,
WEBSOCKET_PORT = process.argv[4] || 8082,
RECORD_STREAM = false;
// Websocket Server
var socketServer = new WebSocket.Server({port: WEBSOCKET_PORT, perMessageDeflate: false});
socketServer.connectionCount = 0;
socketServer.on('connection', function(socket, upgradeReq) {
socketServer.connectionCount++;
console.log(
'New WebSocket Connection: ',
(upgradeReq || socket.upgradeReq).socket.remoteAddress,
(upgradeReq || socket.upgradeReq).headers['user-agent'],
'('+socketServer.connectionCount+' total)'
);
socket.on('close', function(code, message){
socketServer.connectionCount--;
console.log(
'Disconnected WebSocket ('+socketServer.connectionCount+' total)'
);
});
});
socketServer.broadcast = function(data) {
socketServer.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
};
// HTTP Server to accept incomming MPEG-TS Stream from ffmpeg
var streamServer = http.createServer( function(request, response) {
var params = request.url.substr(1).split('/');
if (params[0] !== STREAM_SECRET) {
console.log(
'Failed Stream Connection: '+ request.socket.remoteAddress + ':' +
request.socket.remotePort + ' - wrong secret.'
);
response.end();
}
response.connection.setTimeout(0);
console.log(
'Stream Connected: ' +
request.socket.remoteAddress + ':' +
request.socket.remotePort
);
request.on('data', function(data){
socketServer.broadcast(data);
if (request.socket.recording) {
request.socket.recording.write(data);
}
});
request.on('end',function(){
console.log('close');
if (request.socket.recording) {
request.socket.recording.close();
}
});
// Record the stream to a local file?
if (RECORD_STREAM) {
var path = 'recordings/' + Date.now() + '.ts';
request.socket.recording = fs.createWriteStream(path);
}
}).listen(STREAM_PORT);
console.log('Listening for incomming MPEG-TS Stream on http://127.0.0.1:'+STREAM_PORT+'/<secret>');
console.log('Awaiting WebSocket connections on ws://127.0.0.1:'+WEBSOCKET_PORT+'/');
</secret></secret></some>I am using PHP 7.3 and Symfony 4.3
I am able to get a successfully response from the controller but I can’t watch the video streaming on an external computer.
UPDATED : I don’t know if it may be related to the issue, but when I switch to DEV and then switch again to PROD using :
composer dump-env prod
If I try to clear the cache with :
php bin/console cache:clear
It appears :
joaquin@dev-computer:/var/www/example.com/html$ composer dump-env prod
Successfully dumped .env files in .env.local.php
joaquin@dev-computer:/var/www/example.com/html$ php bin/console cache:clear
09:15:07 ERROR [console] Error thrown while running command "cache:clear". Message: "Failed to remove file "/var/www/example.com/html/var/cache/pro~/pools/WBCr1hDG8d/-/R/iW4Vq0vqfrjVsp2Gihwg": unlink(/var/www/example.com/html/var/cache/pro~/pools/WBCr1hDG8d/-/R/iW4Vq0vqfrjVsp2Gihwg): Permission denied." ["exception" => Symfony\Component\Filesystem\Exception\IOException]8;;file:///var/www/example.com/html/vendor/symfony/filesystem/Exception/IOException.php\^]8;;\ { …},"command" => "cache:clear","message" => "Failed to remove file "/var/www/example.com/html/var/cache/pro~/pools/WBCr1hDG8d/-/R/iW4Vq0vqfrjVsp2Gihwg": unlink(/var/www/example.com/html/var/cache/pro~/pools/WBCr1hDG8d/-/R/iW4Vq0vqfrjVsp2Gihwg): Permission denied."]
In Filesystem.php line 184:
Failed to remove file "/var/www/example.com/html/var/cache/pro~/pools/WBCr1hDG8d/-/R/iW4Vq0vqfrjVsp2Gihwg": unlink(/va
r/www/example.com/html/var/cache/pro~/pools/WBCr1hDG8d/-/R/iW4Vq0vqfrjVsp2Gihwg): Permission denied.
cache:clear [--no-warmup] [--no-optional-warmers] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>
</command>Thanks
-
How to divide a time in half ?
30 août 2019, par Kelly FletI’m trying to find the midpoint of a video, in other words divide the total length by
2
.ffmpeg
gives time in formatHOURS:MM:SS.MICROSECONDS
, so ignoring microseconds, how could I get the half way point ? I’ve tried dividing each number (hours/minutes/seconds
) by2
but this fails in the case of0:01:00
, for example.