Recherche avancée

Médias (91)

Autres articles (84)

  • MediaSPIP Player : problèmes potentiels

    22 février 2011, par

    Le lecteur ne fonctionne pas sur Internet Explorer
    Sur Internet Explorer (8 et 7 au moins), le plugin utilise le lecteur Flash flowplayer pour lire vidéos et son. Si le lecteur ne semble pas fonctionner, cela peut venir de la configuration du mod_deflate d’Apache.
    Si dans la configuration de ce module Apache vous avez une ligne qui ressemble à la suivante, essayez de la supprimer ou de la commenter pour voir si le lecteur fonctionne correctement : /** * GeSHi (C) 2004 - 2007 Nigel McNie, (...)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

  • De l’upload à la vidéo finale [version standalone]

    31 janvier 2010, par

    Le chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
    Upload et récupération d’informations de la vidéo source
    Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
    Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...)

Sur d’autres sites (5939)

  • Compressing videos from a smartphone

    9 novembre 2016, par fejesjoco

    I have a Nexus 6p with the stock camera. It’s set to record at 1080p, 30fps. Here’s a 5 second sample (11 MB).

    Videos from this phone come out at about 17 Mbps on average. I tried to compress it with ffmpeg with -c:v libx264 -crf 23 -preset veryslow, the result comes out at about 5.5 MB, which is about 9 Mbps.

    I think this bitrate is a bit too much. When I look at torrent file listings, I can see high quality videos at 3 GB in size on average, and if such a movie is 90 minutes long on average, that is about 4-5 Mbps which sounds okay.

    I’m wondering, why the big difference ? I can notice that my video is noisy/grainy (which is expected from a phone), and that might reduce compressibility. I tried a few ffmpeg filters, like hqdn3d and atadenoise, but the noise mostly remained (maybe I didn’t play with it enough). Then I figured, the video is also shaky (which is also expected), and that might reduce compressibility too (and even makes temporal noise filtering less effective). I tried to stabilize it with the deshake filter, but that didn’t help either.

    I know I could just limit the bandwidth to whatever I like, but there must be a reason why ffmpeg thinks it needs a high bandwidth to maintain a certain quality, and a lower bandwidth would just decrease the quality.

    Why do these videos have such a high bitrate ? What’s the best way to compress them more while keeping or even increasing their quality ?

  • avcodec_decode_video2 fails to decode after frame resolution change

    7 octobre 2016, par Krzysztof Kansy

    I’m using ffmpeg in Android project via JNI to decode real-time H264 video stream. On the Java side I’m only sending the the byte arrays into native module. Native code is running a loop and checking data buffers for new data to decode. Each data chunk is processed with :

    int bytesLeft = data->GetSize();
    int paserLength = 0;
    int decodeDataLength = 0;
    int gotPicture = 0;
    const uint8_t* buffer = data->GetData();
    while (bytesLeft > 0) {
       AVPacket packet;
       av_init_packet(&packet);
       paserLength = av_parser_parse2(_codecPaser, _codecCtx, &packet.data, &packet.size, buffer, bytesLeft, AV_NOPTS_VALUE, AV_NOPTS_VALUE, AV_NOPTS_VALUE);
       bytesLeft -= paserLength;
       buffer += paserLength;

       if (packet.size > 0) {
           decodeDataLength = avcodec_decode_video2(_codecCtx, _frame, &gotPicture, &packet);
       }
       else {
           break;
       }
       av_free_packet(&packet);
    }

    if (gotPicture) {
    // pass the frame to rendering
    }

    The system works pretty well until incoming video’s resolution changes. I need to handle transition between 4:3 and 16:9 aspect ratios. While having AVCodecContext configured as follows :

    _codecCtx->flags2|=CODEC_FLAG2_FAST;
    _codecCtx->thread_count = 2;
    _codecCtx->thread_type = FF_THREAD_FRAME;

    if(_codec->capabilities&CODEC_FLAG_LOW_DELAY){
       _codecCtx->flags|=CODEC_FLAG_LOW_DELAY;
    }

    I wasn’t able to continue decoding new frames after video resolution change. The got_picture_ptr flag that avcodec_decode_video2 enables when whole frame is available was never true after that.
    This ticket made me wonder if the issue isn’t connected with multithreading. Only useful thing I’ve noticed is that when I change thread_type to FF_THREAD_SLICE the decoder is not always blocked after resolution change, about half of my attempts were successfull. Switching to single-threaded processing is not possible, I need more computing power. Setting up the context to one thread does not solve the problem and makes the decoder not keeping up with processing incoming data.
    Everything work well after app restart.

    I can only think of one workoround (it doesn’t really solve the problem) : unloading and loading the whole library after stream resolution change (e.g as mentioned in here). I don’t think it’s good tho, it will propably introduce other bugs and take a lot of time (from user’s viewpoint).

    Is it possible to fix this issue ?

    EDIT :
    I’ve dumped the stream data that is passed to decoding pipeline. I’ve changed the resolution few times while stream was being captured. Playing it with ffplay showed that in moment when resolution changed and preview in application froze, ffplay managed to continue, but preview is glitchy for a second or so. You can see full ffplay log here. In this case video preview stopped when I changed resolution to 960x720 for the second time. (Reinit context to 960x720, pix_fmt: yuv420p in log).

  • Unable to probe

    8 mai 2017, par Etson

    I’m using php-ffmpeg on windows with cakephp3, and encountered an issue that says :

    Unable to probe /var/www/blogchild.dev/webroot/uploads/records//Танец довольного теннисиста.mp4

    MultimediaController

    <?php
    namespace App\Controller;

    use App\Controller\AppController;

    class MultimediaController extends AppController
    {

       public function initialize()
       {
           parent::initialize(); // TODO: Change the autogenerated stub
           $this->Auth->allow(['index', 'addvideo']);
           $this->loadModel('Posts');
           $this->loadComponent('File');
           $this->loadComponent('Flash');
           $this->loadComponent('Upload');
       }

       public function addvideo()
       {
           $this->viewBuilder()->template('addvideo');
           $posts = $this->Posts->newEntity();
    //        $posts = $this->MsPosts->find()->toArray();
    //        dump($posts);
    //        die();
           if ($this->request->is('post')) {
               $data = $this->request->data;
               $data['mentor_id'] = '1';
               $data['nbr_of_views'] = '0';
               $data['nbr_of_loves'] = '0';
               $data['nbr_of_smiles'] = '0';
               $data['mentor_id'] = '1';
               $data['child_id'] = '1';

               $post = $this->Posts->patchEntity($posts, $data);
    //            var_dump($data);
    //            die();
    //            debug($this->MsPosts->save($post));die();

    //                $upload = $this->File->uploadFile($this->request->data['file'], $post['id']);
    //                $post->file = $upload['url'];
               if (!empty($this->request->data['file']['name'])) {
                   $path = '/uploads' . DS . 'records' . DS . $post->id;
                   $this->uploadFile($_FILES['file'], $path, $post->id);
                   $post->file = $path . DS . $_FILES['file']['name'];
                   $this->Posts->save($post);
               } else {
                   $this->Posts->save($post);
               }
               $this->Flash->success(__('The post saved'));
               return $this->redirect(['action' => 'addvideo']);

    AppController

    <?php
    /**
    * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
    *
    * Licensed under The MIT License
    * For full copyright and license information, please see the LICENSE.txt
    * Redistributions of files must retain the above copyright notice.
    *
    * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
    * @link      http://cakephp.org CakePHP(tm) Project
    * @since     0.2.9
    * @license   http://www.opensource.org/licenses/mit-license.php MIT License
    */
    namespace App\Controller;

    use Cake\Controller\Controller;
    use Cake\Event\Event;
    use Cake\Filesystem\Folder;
    use FFMpeg\Coordinate\TimeCode;
    use FFMpeg\FFMpeg;
    use Cake\Controller\Component;
    use Cake\I18n\I18n;

    /**
    * Application Controller
    *
    * Add your application-wide methods in the class below, your controllers
    * will inherit them.
    *
    * @link http://book.cakephp.org/3.0/en/controllers.html#the-app-controller
    */
    class AppController extends Controller
    {


       /**
        * Initialization hook method.
        *
        * Use this method to add common initialization code like loading components.
        *
        * e.g. `$this->loadComponent('Security');`
        *
        * @return void
        */
       public function initialize()
       {

           parent::initialize();

           $this->loadComponent('Cookie');
           $this->loadComponent('RequestHandler');
           $this->loadComponent('Flash');
           $provider = $this->request->query('provider');
           //if ($provider === null) {
           $this->loadComponent('Auth', [
               'authenticate' => [
                   'Form' => [
                       'finder' => 'auth',
                       'fields' => [
                           'username' => 'email',
                           'password' => 'password'
                       ],
                       'loginAction' => [
                           'controller' => 'Auth',
                           'action' => 'login'
                       ],

                       'loginRedirect' => [
                           'controller' => 'Auth',
                           'action' => 'login'
                       ],

                       'logoutRedirect' => [
                           'controller' => 'Auth',
                           'action' => 'login'
                       ]
                   ],
                   'ADmad/HybridAuth.HybridAuth' => [
                       // All keys shown below are defaults
                       'fields' => [
                           'provider' => 'provider',
                           'openid_identifier' => 'openid_identifier',
                           'email' => 'email'

                       ],
                       'profileModel' => 'ADmad/HybridAuth.SocialProfiles',
                       'profileModelFkField' => 'user_id',

                       // The URL Hybridauth lib should redirect to after authentication.
                       // If no value is specified you are redirect to this plugin's
                       // HybridAuthController::authenticated() which handles persisting
                       // user info to AuthComponent and redirection.
                       'hauth_return_to' => null,

                       'loginRedirect' => [
                           'controller' => 'Auth',
                           'action' => 'login'
                       ],

                       'logoutRedirect' => [
                           'controller' => 'Auth',
                           'action' => 'login'
                       ]
                   ],
               ],



           ]);
    //        } else {
    //            $this->loadComponent('Auth', [
    //                'authenticate' => [
    //                    'Form',
    //
    //
    //                ]
    //
    //            ]);
    //        }

       }

       /**
        * Before render callback.
        *
        * @param \Cake\Event\Event $event The beforeRender event.
        * @return void
        */
       public function beforeRender(Event $event)
       {
           if (!array_key_exists('_serialize', $this->viewVars) &&
               in_array($this->response->type(), ['application/json', 'application/xml'])
           ) {
               $this->set('_serialize', true);
           }

           if ($this->request->session()->read('Auth.User')) {
               $this->set('loggedIn', true);
           } else {
               $this->set('loggedIn', false);
           }
       }

       protected function uploadFile(array $file, $path, $postId)
       {
           $objFile = $file;
           $path = $_SERVER['DOCUMENT_ROOT'] . $path;
           //@TODO check file size|Return error
           $folder = new Folder();
           $folder->create($path, 0755);

           move_uploaded_file($objFile['tmp_name'], $path . DS . $objFile['name']);

           $ffmpeg = FFMpeg::create(
               array(
                   'ffmpeg.binaries' => '/usr/bin/ffmpeg',
                   'ffprobe.binaries' => '/usr/bin/ffprobe',
                   'timeout' => 3600, // The timeout for the underlying process
                   'ffmpeg.threads' => 12,   // The number of threads that FFMpeg should use
               )
           );
           $temp = explode('.', $objFile['name']);
           $video = $ffmpeg->open(WWW_ROOT . 'uploads/records' . DS . $postId . DS . $objFile['name']);
           $frame = $video->frame(TimeCode::fromSeconds(1));
           $userPath = 'uploads/records' . DS . $postId . DS . $temp[0] . '.jpg';
           $frame->save(WWW_ROOT . $userPath);
       }

    WARNING !!!!! Help me......
    enter image description here