Reputation: 143
I'm trying to enable video upload in my post. Can't get it to display the video. The video gets uploaded, I can confirm that while i manage to right click on the video area and download it. The problem is how to view it correctly.
Migration:
class AddAttachmentVideoToPosts < ActiveRecord::Migration
def self.up
change_table :posts do |t|
t.attachment :video
end
end
def self.down
drop_attached_file :posts, :video
end
end
def change
create_table :videos do |t|
t.string :video_file_name
t.string :video_content_type
t.integer :video_file_size
t.datetime :video_updated_at
t.timestamps
end
end
Post Model
class Post < ActiveRecord::Base
default_scope :order => 'created_at desc'
attr_accessible :content, :title, :photo, :photo_delete, :video, :video_delete, :dependent => :destroy
has_attached_file :photo, :styles => { :thumb => "600x600#", :medium => "300x300#", :small => "160x160#"}
has_attached_file :video
validates_uniqueness_of :title
validates_presence_of :title, :content
has_destroyable_file :photo, :video
end
Video part in my post _form
<div class="visible-md visible-lg">
<%= f.file_field :video, :style => "float: left;" %>
<%= f.check_box :video_delete, :style => "float: left;" %> Delete video
</div><br />
<div class="visible-xs">
<%= f.file_field :video, :style => "center" %>
<%= f.check_box :video_delete, :style => "center" %> Delete video
</div><br />
Video part in Post Show
<% if @post.video? %>
<h1 class="center">
<%= @post.title %>
</h1><br />
<%= video_path @post.video.url %>
<% end %>
I have also tried with video_tag which don't work and when I try with:
<iframe width="490" height="275" src="<%= video_path @post.video.url %>" frameborder="0" allowfullscreen autoplay="true">
</iframe>
I get a player that won't play. Would really appreciate if you look it through and maybe help me to come up with a solution that will work. Thanks!
Upvotes: 4
Views: 9037
Reputation: 846
Paperclip Video Upload:
I had the same issue just this past week - Try this!
Video model:
has_attached_file :video, styles: {
:medium => {
:geometry => "640x480",
:format => 'mp4'
},
:thumb => { :geometry => "160x120", :format => 'jpeg', :time => 10}
}, :processors => [:transcoder]
validates_attachment_content_type :video, content_type: /\Avideo\/.*\Z/
Make sure you already bundled:
gem 'paperclip', '~> 4.3.1'
gem 'aws-sdk', '< 2.0'
gem 'paperclip-av-transcoder'
gem "paperclip-ffmpeg", "~> 1.2.0"
Run the paperclip migration:
rails g paperclip model video
Be sure to add in post_controller.rb:
private
def bscenes_params
params.require(:post).permit(:video)
end
Upload form:
<%= f.file_field :video %>
Show page:
<%= video_tag bscene.video.url(:medium), controls: true, style: "max-width: 100%;" %>
At this point you should get this error:
Av::UnableToDetect (Unable to detect any supported library):
Go to your terminal and type in:
brew options ffmpeg
Then run the following to install ffmpeg:
brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools
Restart your server and try to upload a video now! Hope this helps - Happy coding :)
Upvotes: 3
Reputation: 548
You should use video
tag, not iframe
(only video
tag has autoplay options). Check here what formats are supported by what browser: http://caniuse.com/#search=video
If you want crossbrowser solution, try VideoJS - http://www.videojs.com/ Here you can get a Rails plugin - https://github.com/seanbehan/videojs_rails
Upvotes: 2