Recherche avancée

Médias (1)

Mot : - Tags -/école

Autres articles (47)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

  • Mise à jour de la version 0.1 vers 0.2

    24 juin 2013, par

    Explications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
    Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...)

Sur d’autres sites (7356)

  • How do I get videos to upload using carrierwave-video ?

    10 juillet 2016, par Eric

    I tried to follow the instructions on github to upload using carrierwave-video, but get an error that says the file or directory mmpeg -i doesn’t exist.

    The upload path for images is correct, just not the video one.

    I added all of the following code necessary to help solve the error and minified as much as I possibly could.

    This is the video uploader code using carrierwave :

    class VideoUploader < CarrierWave::Uploader::Base

     include CarrierWave::Video
     storage :file

     version :mp4 do
       process :encode_video => [:mp4, resolution: "100x100"]
     end

     def store_dir
       "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
     end
    end

    This is the movie controller code that handles uploading of videos :

    class MoviesController < ApplicationController
      include MoviesHelper

      def index
         mode "index"
      end

      def show
         mode "show"
      end

      def new
         mode "new"
      end

      def edit
         mode "edit"
      end

      def create
         mode "create"
      end

      def update
         mode "update"
      end

      def destroy
         mode "destroy"
      end

      def review
         mode "review"
      end

      def approve
         mode "approve"
      end

      def deny
         mode "deny"
      end
    end

    This is the model data for the movie that goes with it :

    class Movie < ActiveRecord::Base
     attr_accessible :created_on, :description, :maintenance, :reviewed, :subplaylist_id, :title, :user_id, :video, :remote_video_url
     belongs_to :user
     belongs_to :subplaylist
     mount_uploader :video, VideoUploader
    end

    This is where the movie is supposed to be displayed but it is not working :

    <% provide(:title, "Movie: Where movies are made!") %>
    <% provide(:keywords, "movies, video") %>
    <% provide(:description, "This is the place where users showcase their wonderful video talent.") %>
    <p>&lt;%= notice %></p>
    <h1 class="pageheader">&lt;%= @movie.title %></h1>
    <br />
    <p class="pagetext">&lt;%= video_tag(@movie.video_url.to_s, controls: true, class: "imagebox") %></p>
    <p class="pagetext">&lt;%= @movie.description %></p>
    <p class="pagetext">Created on: &lt;%= @movie.created_on.strftime("%B-%d-%Y") %></p>
    <p class="pagetext">Owner: &lt;%= getType(@movie.user) %>&lt;%= link_to @movie.user.vname, user_path(@movie.user) %></p>
    <br />
    <p class="pagetext">&lt;%= link_to 'Back', mainplaylist_subplaylist_path(@subplaylist.mainplaylist, @movie.subplaylist) %></p>

    This is where the movie new action is :

    &lt;% provide(:title, "Movie: Create new movies here!") %>
    &lt;% provide(:description, "New movies are uploaded only to the site when the movie gets approved.") %>
    <h1 class="pagetextheader">New movie</h1>
    &lt;%= render 'form' %>
    <p class="pagetext">&lt;%= link_to 'Back', mainplaylist_subplaylist_path(@subplaylist.mainplaylist, @subplaylist) %></p>

    This is where the movies forum parameters are :

    &lt;%= form_for([@subplaylist, @movie], :html=>{:multipart => true}) do |f| %>
     &lt;% if @movie.errors.any? %>
       <div>
         <h2>&lt;%= pluralize(@movie.errors.count, "error") %> prohibited this movie from being saved:</h2>

         <ul>
         &lt;% @movie.errors.full_messages.each do |msg| %>
           <li>&lt;%= msg %></li>
         &lt;% end %>
         </ul>
       </div>
     &lt;% end %>
     <br />
     <div class="pagetext">
       &lt;%= f.label :title %><br />
       &lt;%= f.text_field :title %>
     </div>
     <div class="pagetext">
       &lt;%= f.file_field :video %>
     </div>
     <div class="pagetext">
       &lt;%= f.label :remote_video_url, "or video URL" %><br />
       &lt;%= f.text_field :remote_video_url %>
     </div>
     <div class="pagetext">
       &lt;%= f.label :description %><br />
       &lt;%= f.text_area :description %>
     </div>
     <div class="pagetext">
       &lt;%= f.submit %>
     </div>
     <br />
    &lt;% end %>

    This is the movies helper code :

    module MoviesHelper

      def mode(type)
         code = auto_logout
         if(code == true)
            sign_out
            redirect_to root_path
         else
            #Check if Maintenance is turned_on
            allmode = Maintenancemode.find_by_id(1)
            moviemode = Maintenancemode.find_by_id(19)
            mode_turned_on = (allmode.maintenance_on || moviemode.maintenance_on)
            #Determine if any maintenance is on
            if(mode_turned_on)
               #Determine if we are a regular user
               regularUser = (!current_user || !current_user.admin?)
               if(regularUser)
                  #Determine which maintenance mode is on
                  if(allmode.maintenance_on)
                     redirect_to maintenance_path
                  else
                     redirect_to movies_maintenance_path
                  end
               else
                  switch type
               end
            else
               switch type
            end
         end
      end

      private
         def getType(user)
            if(user.admin)
               value = "$"
            else
               typeFound = Usertype.find_by_user_id(user.id)
               if(typeFound)
                  type = typeFound.privilege
                  if(type == "Reviewer")
                     value = "^"
                  elsif(type == "Banned")
                     value = "!"
                  else
                     value = "~"
                  end
               else
                  value = "~"
               end
            end
            return value
         end

         def movieApproved
            movieFound = Movie.find_by_id(params[:movie_id])
            if(movieFound)
               movieFound.reviewed = true
               pouch = Pouch.find_by_user_id(movieFound.user_id)
               pointsForMovie = 10
               pouch.amount += pointsForMovie
               @pouch = pouch
               @pouch.save
               @movie = movieFound
               @movie.save
    #            MovieMailer.movie_approved(@movie, pointsForMovie).deliver
               redirect_to movies_review_path
            else
               render "public/404"
            end
         end

         def movieDenied
            movieFound = Movie.find_by_id(params[:movie_id])
            if(movieFound)
               #Retrieve the user who owns this pet first
               #userEmail = petFound.user.email
               #Send mail to user with link to edit the pet they sent
               @movie = movieFound
               MovieMailer.movie_denied(@movie).deliver
               redirect_to movies_review_path
            else
               render "public/404"
            end
         end

         def createMovie(subplaylistFound)
            newMovie = subplaylistFound.movies.new
            @subplaylist = subplaylistFound
            @movie = newMovie
         end

         def saveMovie(subplaylistFound, logged_in)
            newMovie = subplaylistFound.movies.new(params[:movie])
            newMovie.user_id = logged_in.id
            currentTime = Time.now
            newMovie.created_on = currentTime
            @movie = newMovie
            if(@movie.save)
               @subplaylist = subplaylistFound
    #            MovieMailer.review_movie(@movie).deliver
               flash[:success] = "#{@movie.title} is currently being reviewed please check back later."
               redirect_to subplaylist_movie_path(@subplaylist, @movie)
            else
               render "new"
            end
         end

         def switch(type)
            if(type == "index") #Admin only
               logged_in = current_user
               if(logged_in)
                  if(logged_in.admin)
                     allMovies = Movies.order("created_on desc").page(params[:page]).per(10)
                     @movies = allMovies
                  else
                     redirect_to root_path
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "show")
               movieFound = Movie.find_by_id(params[:id])
               if(movieFound)
                  subplaylistFound = Subplaylist.find_by_id(params[:subplaylist_id])
                  if(subplaylistFound)
                     if(movieFound.reviewed)
                        @subplaylist = subplaylistFound
                        @movie = movieFound
                     else
                        logged_in = current_user
                        if(logged_in)
                           userMatch = ((logged_in.id == movieFound.user_id) || logged_in.admin)
                           if(userMatch)
                              @subplaylist = subplaylistFound
                              @movie = movieFound
                           else
                              redirect_to root_path
                           end
                        else
                           redirect_to root_path
                        end
                     end
                  else
                     redirect_to root_path
                  end
               else
                  render "public/404"
               end
            elsif(type == "new")
               logged_in = current_user
               if(logged_in)
                  subplaylistFound = Subplaylist.find_by_id(params[:subplaylist_id])
                  if(subplaylistFound)
                     if(subplaylistFound.collab_mode)
                        createMovie(subplaylistFound)
                     else
                        userMatch = (logged_in.id == subplaylistFound.user_id)
                        if(userMatch)
                           createMovie(subplaylistFound)
                        else
                           redirect_to root_path
                        end
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "create")
               logged_in = current_user
               if(logged_in)
                  subplaylistFound = Subplaylist.find_by_id(params[:subplaylist_id])
                  if(subplaylistFound)
                     if(subplaylistFound.collab_mode)
                        saveMovie(subplaylistFound, logged_in)
                     else
                        userMatch = (logged_in.id == subplaylistFound.user_id)
                        if(userMatch)
                           saveMovie(subplaylistFound, logged_in)
                        else
                           redirect_to root_path
                        end
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "edit")
               logged_in = current_user
               if(logged_in)
                  movieFound = Movie.find_by_id(params[:id])
                  if(movieFound)
                     userMatch = (logged_in.id == movieFound.user_id)
                     if(userMatch)
                        subplaylistFound = Subplaylist.find_by_id(movieFound.subplaylist_id)
                        if(subplaylistFound)
                           @subplaylist = subplaylistFound
                           @movie = movieFound
                        else
                           render "public/404"
                        end
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "update")
               logged_in = current_user
               if(logged_in)
                  movieFound = Movie.find_by_id(params[:id])
                  if(movieFound)
                     userMatch = (logged_in.id == movieFound.user_id)
                     if(userMatch)
                        subplaylistFound = Subplaylist.find_by_id(movieFound.subplaylist_id)
                        if(subplaylistFound)
                           @movie = movieFound
                           if(@movie.update_attributes(params[:movie]))
                              @subplaylist = subplaylistFound
                              flash[:success] = 'Movie was successfully updated.'
                              redirect_to subplaylist_movie_path(@subplaylist, @movie)
                           else
                              render "edit"
                           end
                        else
                           render "public/404"
                        end
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "destroy")
               logged_in = current_user
               if(logged_in)
                  movieFound = Movie.find_by_id(params[:id]) #Need to move this below the admin section to protect it
                  if(movieFound)
                     if(logged_in.admin)
                        subplaylistFound = Subplaylist.find_by_id(movieFound.subplaylist_id)
                        if(subplaylistFound)
                           @movie = movieFound
                           @subplaylist = subplaylistFound
                           @movie.destroy
                           redirect_to mainplaylist_subplaylist_path(@subplaylist.mainplaylist, @subplaylist)
                        else
                           render "public/404"
                        end
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "review") #Admin
               logged_in = current_user
               if(logged_in)
                  if(logged_in.admin)
                     allMovies = Movie.all
                     moviesToReview = allMovies.select{|movie| !movie.reviewed}
                     @movies = Kaminari.paginate_array(moviesToReview).page(params[:page]).per(10)
                  else
                     typeFound = Usertype.find_by_user_id(logged_in.id)
                     if(typeFound.privilege == "Reviewer")
                        allMovies = Movie.all
                        moviesToReview = allMovies.select{|movie| !movie.reviewed}
                        @movies = Kaminari.paginate_array(moviesToReview).page(params[:page]).per(10)
                     else
                        redirect_to root_path
                     end
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "approve") #Admin
               logged_in = current_user
               if(logged_in)
                  if(logged_in.admin)
                     movieApproved
                  else
                     typeFound = Usertype.find_by_user_id(logged_in.id)
                     if(typeFound.privilege == "Reviewer")
                        movieApproved
                     else
                        redirect_to root_path
                     end
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "deny") #Admin
               logged_in = current_user
               if(logged_in)
                  if(logged_in.admin)
                     movieDenied
                  else
                     typeFound = Usertype.find_by_user_id(logged_in.id)
                     if(typeFound.privilege == "Reviewer")
                        movieDenied
                     else
                        redirect_to root_path
                     end
                  end
               else
                  redirect_to root_path
               end
            end
         end
    end

    This is the subplaylists show code :

    &lt;% provide(:title, "Subplaylist: The place where users videos gets uploaded to!") %>
    &lt;% provide(:keywords, "user, video, uploaded") %>
    &lt;% provide(:description, "Allows the categorization of various videos that the user submitted successfully.") %>
    <p>&lt;%= notice %></p>
    <h1 class="pageheader">&lt;%= @subplaylist.title %></h1>
    <br />
    <p class="pagetext">&lt;%= @subplaylist.description %></p>
    <br />
    <div class="pagebox">&lt;%= paginate @movies %></div>





    <br />
    <div class="pagetext">
      &lt;% @movies.each_with_index do |movie, index| %>
         <div class="container">
            <div class="inner">
               <div class="inner">&lt;%= link_to movie.title, subplaylist_movie_path(@subplaylist, movie) %></div>
               &lt;% if current_user &amp;&amp; (current_user.id == movie.user_id || current_user.admin? )%>
                  <div class="inner">&lt;%= button_to 'Edit', edit_subplaylist_movie_path(@subplaylist, movie), method: :get %></div>
                  <div class="inner">&lt;%= button_to 'Destroy', [@subplaylist, movie], method: :delete, data: { confirm: 'Are you sure?' } %></div>
               &lt;% end %>
               <p>&lt;%= video_tag movie.video_url(:thumb).to_s, controls: true %></p>
            </div>
            <br />
            <p>Created on: &lt;%= movie.created_on.strftime("%B-%d-%Y") %></p>
            <p>Owner: &lt;%= getType(movie.user) %>&lt;%= link_to movie.user.vname, user_path(movie.user) %></p>
         </div>
         &lt;% if ((index + 1) % 3) == 0 %>
            <br />
            <br />
         &lt;% end %>
      &lt;% end %>
    </div>
    <br />
    &lt;% if current_user %>
      <p class="pagetext">&lt;%= link_to "New Movie", new_subplaylist_movie_path(@subplaylist) %></p>
      <br />
    &lt;% end %>
    <p class="pagetext">&lt;%= link_to 'Back', user_mainplaylist_path(@mainplaylist.user.vname, @subplaylist.mainplaylist.title) %></p>

    This is the subplaylists model :

    class Subplaylist &lt; ActiveRecord::Base
      attr_accessible :title, :description, :collab_mode
      belongs_to :user
      belongs_to :mainplaylist
      has_many :movies, :foreign_key => "subplaylist_id", :dependent => :destroy
      VALID_NAME = /\A[A-Za-z][A-Za-z1-9][A-Za-z1-9 ]+\z/
      validates :title, presence: true, format: {with: VALID_NAME}
      validates :description, presence: true
    end

    This is the subplaylists controller code :

    class SubplaylistsController &lt; ApplicationController
      include SubplaylistsHelper

      def index
         mode "index"
      end

      def show
         mode "show"
      end

      def new
         mode "new"
      end

      def edit
         mode "edit"
      end

      def create
         mode "create"
      end

      def update
         mode "update"
      end

      def destroy
         mode "destroy"
      end
    end

    This is the subplaylist helper code :

    module SubplaylistsHelper

      def mode(type)
         code = auto_logout
         if(code == true)
            sign_out
            redirect_to root_path
         else
            #Check if Maintenance is turned_on
            allmode = Maintenancemode.find_by_id(1)
            subplaylistmode = Maintenancemode.find_by_id(18)
            mode_turned_on = (allmode.maintenance_on || subplaylistmode.maintenance_on)
            #Determine if any maintenance is on
            if(mode_turned_on)
               #Determine if we are a regular user
               regularUser = (!current_user || !current_user.admin?)
               if(regularUser)
                  #Determine which maintenance mode is on
                  if(allmode.maintenance_on)
                     redirect_to maintenance_path
                  else
                     redirect_to subplaylists_maintenance_path
                  end
               else
                  switch type
               end
            else
               switch type
            end
         end
      end

      private
         def getType(user)
            if(user.admin)
               value = "$"
            else
               typeFound = Usertype.find_by_user_id(user.id)
               if(typeFound)
                  type = typeFound.privilege
                  if(type == "Reviewer")
                     value = "^"
                  elsif(type == "Banned")
                     value = "!"
                  else
                     value = "~"
                  end
               else
                  value = "~"
               end
            end
            return value
         end

         def switch(type)
            if(type == "show")
               subplaylistFound = Subplaylist.find_by_id(params[:id])
               if(subplaylistFound)
                  mainplaylistFound = Mainplaylist.find_by_title(params[:mainplaylist_id])
                  if(mainplaylistFound)
                     playlistMatch = (subplaylistFound.mainplaylist_id == mainplaylistFound.id)
                     if(playlistMatch)
                        @mainplaylist = mainplaylistFound
                        @subplaylist = subplaylistFound
                        subplaylistMovies = @subplaylist.movies.all
                        reviewedMovies = subplaylistMovies
                        if(subplaylistMovies.count > 0)
                           reviewedMovies = subplaylistMovies.select{|movie| movie.reviewed}
                        end
                        @movies = Kaminari.paginate_array(reviewedMovies).page(params[:page]).per(10)
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "destroy")
               logged_in = current_user
               if(logged_in)
                  subplaylistFound = Subplaylist.find_by_id(params[:id]) #Need to move this below the admin section to protect it
                  if(subplaylistFound)
                     if(logged_in.admin)
                        mainplaylistFound = Mainplaylist.find_by_id(subplaylistFound.mainplaylist_id)
                        if(mainplaylistFound)
                           @subplaylist = subplaylistFound
                           @mainplaylist = mainplaylistFound
                           @subplaylist.destroy
                           redirect_to mainplaylist_subplaylists_path(@mainplaylist)
                        else
                           render "public/404"
                        end
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            end
         end
    end

    This is the User model :

    class User &lt; ActiveRecord::Base
      attr_accessible :email, :first_name, :last_name, :login_id, :vname, :password, :password_confirmation, :avatar
      has_secure_password
      mount_uploader :avatar, AvatarUploader
      before_save { |user| user.email = user.email.downcase }
      before_save { |user| user.first_name = user.first_name.humanize }

      #key
      has_one :sessionkey, :foreign_key => "user_id", :dependent => :destroy
      has_one :usertype, :foreign_key => "user_id", :dependent => :destroy

      #Video section
      has_many :mainplaylists, :foreign_key => "user_id", :dependent => :destroy
      has_many :subplaylists, :foreign_key => "user_id", :dependent => :destroy
      has_many :movies, :foreign_key => "user_id", :dependent => :destroy

      #validates :first_name, presence: true
      VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
      VALID_NAME_REGEX = /\A[a-z][a-z][a-z]+\z/i
      VALID_VNAME_REGEX = /\A[A-Za-z][A-Za-z][A-Za-z][A-Za-z0-9 ]+([-][A-Za-z0-9 ]+)?\z/
      VALID_PASSWORD_REGEX = /\A[A-Za-z0-9!][A-Za-z0-9!][A-Za-z0-9!][A-Za-z0-9!][A-Za-z0-9!][A-Za-z0-9!]+\z/
      validates :first_name, presence: true, format: { with: VALID_NAME_REGEX}
      validates :last_name, presence: true, format: { with: VALID_NAME_REGEX}
      validates :email, presence: true, format: { with: VALID_EMAIL_REGEX}
      validates :login_id, presence: true, format: { with: VALID_VNAME_REGEX}, uniqueness: { case_sensitive: false}
      validates :vname, presence: true, format: { with: VALID_VNAME_REGEX}, uniqueness: { case_sensitive: false}
      validates :password, length: {minimum: 6}#, format: { with: VALID_PASSWORD_REGEX}
      validates :password_confirmation, presence: true #, format: { with: VALID_PASSWORD_REGEX}

      def to_param
         vname
      end
    end

    This is the sessionkey model :

    class Sessionkey &lt; ActiveRecord::Base
     belongs_to :user
    end

    This is the usertype model :

    class Usertype &lt; ActiveRecord::Base
     attr_accessible :privilege, :user_id #Only priviledge will be changeable
     belongs_to :user
    end

    This is the error message :

    No such file or directory - ffmpeg -i /home/eric/Projects/Local/Lduelingpets/Trial/public/uploads/tmp/1466811951-3149-2702/mp4_TrialMovies.mp4
  • Gstreamer AAC encoding no more supported ?

    22 juillet 2016, par Gianks

    i’d like to include AAC as one of the compatible formats in my app but i’m having troubles with its encoding.
    FAAC seems to be missing in GStreamer-1.0 Debian-derived packages (see Ubuntu) and the main reason for that (if i got it correctly) is the presence of avenc_aac (Lunchpad bugreport) as a replacement.

    I’ve tried the following :

    gst-launch-1.0 filesrc location="src.avi" ! tee name=t  t.! queue ! decodebin ! progressreport ! x264enc ! mux. t.! queue ! decodebin ! audioconvert ! audioresample ! avenc_aac compliance=-2 ! mux. avmux_mpegts name=mux ! filesink location=/tmp/test.avi

    It hangs prerolling with :

    ERROR libav :0:: AAC bitstream not in ADTS format and extradata missing

    Using mpegtsmux instead of avmux_mpegts seems to work since the file is created but it results with no working audio (with some players it’s completely unplayable).

    This is the trace of mplayer :

    Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
    [aac @ 0x7f2860d6c3c0]channel element 3.15 is not allocated
    [aac @ 0x7f2860d6c3c0]Sample rate index in program config element does not match the sample rate index configured by the container.
    [aac @ 0x7f2860d6c3c0]Inconsistent channel configuration.
    [aac @ 0x7f2860d6c3c0]get_buffer() failed
    [aac @ 0x7f2860d6c3c0]Assuming an incorrectly encoded 7.1 channel layout instead of a spec-compliant 7.1(wide) layout, use -strict 1 to decode according to the specification instead.
    [aac @ 0x7f2860d6c3c0]Reserved bit set.
    [aac @ 0x7f2860d6c3c0]Number of bands (20) exceeds limit (14).
    [aac @ 0x7f2860d6c3c0]invalid band type
    [aac @ 0x7f2860d6c3c0]More than one AAC RDB per ADTS frame is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
    [aac @ 0x7f2860d6c3c0]Reserved bit set.
    [aac @ 0x7f2860d6c3c0]Number of bands (45) exceeds limit (28).
    Unknown/missing audio format -> no sound
    ADecoder init failed :(
    Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)
    FAAD: compressed input bitrate missing, assuming 128kbit/s!
    AUDIO: 44100 Hz, 2 ch, floatle, 128.0 kbit/9.07% (ratio: 16000->176400)
    Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio))
    ==========================================================================
    AO: [pulse] 44100Hz 2ch floatle (4 bytes per sample)
    Starting playback...
    FAAD: error: Bitstream value not allowed by specification, trying to resync!
    FAAD: error: Invalid number of channels, trying to resync!
    FAAD: error: Invalid number of channels, trying to resync!
    FAAD: error: Bitstream value not allowed by specification, trying to resync!
    FAAD: error: Invalid number of channels, trying to resync!
    FAAD: error: Bitstream value not allowed by specification, trying to resync!
    FAAD: error: Channel coupling not yet implemented, trying to resync!
    FAAD: error: Invalid number of channels, trying to resync!
    FAAD: error: Invalid number of channels, trying to resync!
    FAAD: error: Bitstream value not allowed by specification, trying to resync!
    FAAD: Failed to decode frame: Bitstream value not allowed by specification
    Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
    VO: [vdpau] 640x480 => 640x480 Planar YV12
    A:3602.2 V:3600.0 A-V:  2.143 ct:  0.000   3/  3 ??% ??% ??,?% 0 0
    FAAD: error: Array index out of range, trying to resync!
    FAAD: error: Bitstream value not allowed by specification, trying to resync!
    FAAD: error: Bitstream value not allowed by specification, trying to resync!
    FAAD: error: Unexpected fill element with SBR data, trying to resync!
    FAAD: error: Bitstream value not allowed by specification, trying to resync!
    FAAD: error: Bitstream value not allowed by specification, trying to resync!
    FAAD: error: Channel coupling not yet implemented, trying to resync!
    FAAD: error: Invalid number of channels, trying to resync!
    FAAD: error: PCE shall be the first element in a frame, trying to resync!
    FAAD: error: Invalid number of channels, trying to resync!
    FAAD: Failed to decode frame: Invalid number of channels
    A:3602.2 V:3600.1 A-V:  2.063 ct:  0.000   4/  4 ??% ??% ??,?% 0 0

    These the messages produced by VLC (10 seconds of playback) :

    ts info: MPEG-4 descriptor not found for pid 0x42 type 0xf
    core error: option sub-original-fps does not exist
    subtitle warning: failed to recognize subtitle type
    core error: no suitable demux module for `file/subtitle:///tmp//test.avi.idx'
    avcodec info: Using NVIDIA VDPAU Driver Shared Library 361.42 Tue Mar 22 17:29:16 PDT 2016 for hardware decoding.
    core warning: VoutDisplayEvent 'pictures invalid'
    core warning: VoutDisplayEvent 'pictures invalid'
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio warning: ADTS CRC not supported
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio warning: ADTS CRC not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio warning: Invalid ADTS header
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported
    packetizer_mpeg4audio error: Multiple blocks per frame in ADTS not supported

    Using the error of the hanging pipeline I’ve finally discovered that avenc_aac should be told in such way to output the data NOT in RAW AAC but in ADTS AAC, the point is that i’ve no idea how to do that with Gstreamer. See here, bottom of the page : FFMPEG Ticket

    At this point since i’ve found no documentation seems right to say we have no support for AAC encoding in GStreamer... which isn’t true, i guess ! (IMHO anyway seems strange the missing of FAAC if AVENC_AAC requires all the time to be set in experimental mode)

    Can someone propose a working pipeline for this ?

    UPDATE

    After some more research i’ve found (via gst-inspect on avenc_aac) what i’m probably looking for but i don’t know how to setup it as needed.
    Have a look at stream-format :

    Pad Templates:
     SRC template: 'src'
       Availability: Always
       Capabilities:
         audio/mpeg
                  channels: [ 1, 6 ]
                      rate: [ 4000, 96000 ]
               mpegversion: 4
             stream-format: raw
           base-profile: lc

    Thanks

  • Requirements for using ffmpeg to create mpeg4 files in SaaS solution

    25 août 2016, par Paul Fleming

    My requirement is :
    - On upload of a supported video file, convert the file to common formats to maximize web compatibility.

    Essentially, I want to take a non-web-supported video file, and converted it to WEBM and MPEG4. This will take place on a Windows Server VM inside Microsoft Azure.

    ffmpeg seems to be the de facto standard for video conversion yet it introduces licensing hell, not only with GPL/LGPL but by not offering a commercial license, meaning I now have to worry about paying royalties to MPEG-LA.

    Can anyone advise on MPEG-LAs licensing model as it applies to SaaS ? I will not be distributing ffmpeg (runs server side) and the conversion takes place on Windows (Server) OS.