Recherche avancée

Médias (91)

Autres articles (40)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

  • Submit bugs and patches

    13 avril 2011

    Unfortunately a software is never perfect.
    If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
    If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
    You may also (...)

Sur d’autres sites (9316)

  • MediaPlayer within TextureView not working as intended

    15 mars 2016, par Russiee

    I’ve put in a MediaPlayer within a TextureView, which itself is located inside a ListView.

    Yesterday, the MediaPlayer worked as intended with a test .mp4 clip.
    Today, the MediaPlayer tries doing some kind of FFmpeg Extractor, for which i’ve been unable to find any kind of information about.

    This is the stack trace :

    03-14 13:43:00.076 477-16532/? V/FFmpegExtractor: SniffFFMPEG
    03-14 13:43:00.076 477-16532/? I/FFmpegExtractor: android-source:0xafcff040
    03-14 13:43:00.077 477-16532/? D/FFMPEG: android source begin open
    03-14 13:43:00.077 477-16532/? D/FFMPEG: android open, url: android-source:0xafcff040
    03-14 13:43:00.077 477-16532/? D/FFMPEG: ffmpeg open android data source success, source ptr: 0xafcff040
    03-14 13:43:00.077 477-16532/? D/FFMPEG: android source open success
    03-14 13:43:00.149 477-16532/? I/FFMPEG: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'android-source:0xafcff040':
    03-14 13:43:00.149 477-16532/? I/FFMPEG:   Metadata:
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     major_brand     : qt  
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     minor_version   : 0
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     compatible_brands: qt  
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     creation_time   : 2016-03-13 19:24:58
    03-14 13:43:00.149 477-16532/? I/FFMPEG:   Duration: 00:00:10.88, start: 0.000000, bitrate: 11209 kb/s
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 86 kb/s (default)
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     Metadata:
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       creation_time   : 2016-03-13 19:24:58
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       handler_name    : Core Media Data Handler
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 11113 kb/s, 29.98 fps, 29.97 tbr, 600 tbn, 50 tbc (default)
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     Metadata:
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       creation_time   : 2016-03-13 19:24:58
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       handler_name    : Core Media Data Handler
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       encoder         : H.264
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     Stream #0:2(und): Data: none (mebx / 0x7862656D), 1 kb/s (default)
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     Metadata:
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       creation_time   : 2016-03-13 19:24:58
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       handler_name    : Core Media Data Handler
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    03-14 13:43:00.149 477-16532/? I/FFMPEG:     Metadata:
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       creation_time   : 2016-03-13 19:24:58
    03-14 13:43:00.149 477-16532/? I/FFMPEG:       handler_name    : Core Media Data Handler
    03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: FFmpegExtrator, url: android-source:0xafcff040, format_name: mov,mp4,m4a,3gp,3g2,mj2, format_long_name: QuickTime / MOV
    03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: list the formats suppoted by ffmpeg:
    03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: ========================================
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[00]: mpeg
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[01]: mpegts
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[02]: mov,mp4,m4a,3gp,3g2,mj2
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[03]: matroska,webm
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[04]: asf
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[05]: rm
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[06]: flv
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[07]: swf
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[08]: avi
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[09]: ape
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[10]: dts
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[11]: flac
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[12]: ac3
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[13]: wav
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[14]: ogg
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[15]: vc1
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: format_names[16]: hevc
    03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: ========================================
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: major_brand tag is:qt  
    03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: [mp4]format is mov, confidence should be larger than mpeg4
    03-14 13:43:00.149 477-16532/? D/FFMPEG: android source close
    03-14 13:43:00.149 477-16532/? I/FFmpegExtractor: sniff through BetterSniffFFMPEG success
    03-14 13:43:00.149 477-16532/? D/FFmpegExtractor: ffmpeg detected media content as 'video/mp4' with confidence 0.41
    03-14 13:43:00.149 477-16532/? I/MediaExtractor: Use extended extractor for the special mime(video/mp4) or codec
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: FFmpegExtractor::FFmpegExtractor
    03-14 13:43:00.149 477-16532/? V/FFmpegExtractor: mFilename: android-source:0xafcff040
    03-14 13:43:00.150 477-16532/? D/FFMPEG: android source begin open
    03-14 13:43:00.150 477-16532/? D/FFMPEG: android open, url: android-source:0xafcff040
    03-14 13:43:00.150 477-16532/? D/FFMPEG: ffmpeg open android data source success, source ptr: 0xafcff040
    03-14 13:43:00.150 477-16532/? D/FFMPEG: android source open success
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: file startTime: 0
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: the duration is 00:00:10.87
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: stream_index: 0
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: support the codec(aac)
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: Tag mp4a/0x6134706d with codec(aac)
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: audio stream extradata(2):
    03-14 13:43:00.230 477-16532/? V/codec_utils: AAC
    03-14 13:43:00.230 477-16532/? V/codec_utils: aac profile: 1, sf_index: 4, channel: 1
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: bit_rate: 86249, sample_rate: 44100, channels: 1, bits_per_coded_sample: 16, block_align:0
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: the time is 00:00:10.93
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: audio startTime:0
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: create a audio track
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: stream_index: 1
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: support the codec(h264)
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: Tag avc1/0x31637661 with codec(h264)
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: video stream extradata:
    03-14 13:43:00.230 477-16532/? V/codec_utils: AVC
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: width: 1920, height: 1080, bit_rate: 11113682
    03-14 13:43:00.230 477-16532/? I/FFmpegExtractor: the time is 00:00:10.87
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: video startTime:0
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: create a video track
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: the stream is AVC, the length of a NAL unit: 4
    03-14 13:43:00.230 477-16532/? V/FFmpegExtractor: Starting reader thread
    03-14 13:43:00.230 477-16532/? D/FFmpegExtractor: Reader thread started
    03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: mProbePkts: 0, mEOF: 0, pb->error(if has): 0, mDefersToCreateVideoTrack: 0, mDefersToCreateAudioTrack: 0
    03-14 13:43:00.231 477-16532/? D/FFmpegExtractor: supported mime: video/mp4
    03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getMetaData
    03-14 13:43:00.231 477-16537/? V/FFmpegExtractor: FFmpegExtractor enter thread(readerEntry)
    03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getTrack[0]
    03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getTrackMetaData[0]
    03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getTrack[1]
    03-14 13:43:00.231 477-16532/? V/FFmpegExtractor: FFmpegExtractor::getTrackMetaData[1]
    03-14 13:43:00.232 10973-10973/com.hobbyte.touringandroid E/MediaPlayer: Should have subtitle controller already set

    Upon trying to play the video file, I get this log :

    03-14 13:52:06.133 743-821/system_process W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client
    03-14 13:52:06.133 477-477/? D/NuPlayerDriver: start(0xb0f05040)
    03-14 13:52:06.133 477-16531/? I/GenericSource: start
    03-14 13:52:06.133 477-16531/? V/FFmpegExtractor: FFmpegExtractor::Track::start audio
    03-14 13:52:06.133 477-16531/? V/FFmpegExtractor: FFmpegExtractor::Track::start video
    03-14 13:52:06.133 477-16532/? V/FFmpegExtractor: read audio flush pkt
    03-14 13:52:06.133 477-16532/? V/FFmpegExtractor: read video flush pkt
    03-14 13:52:06.139 477-24743/? D/SoftFFmpegAudio: SoftFFmpegAudio component: OMX.ffmpeg.aac.decoder mMode: 1
    03-14 13:52:06.141 477-24743/? V/SoftFFmpegAudio: get pcm params, nChannels:4294967295, nSamplingRate:4294967295
    03-14 13:52:06.141 477-24743/? V/SoftFFmpegAudio: set OMX_IndexParamAudioPcm, nChannels:1, nSampleRate:44100, nBitsPerSample:16
    03-14 13:52:06.141 477-24743/? V/SoftFFmpegAudio: set OMX_IndexParamAudioAac, nChannels:1, nSampleRate:44100
    03-14 13:52:06.141 477-24743/? E/OMXNodeInstance: setParameter(1866465283) ERROR: 0x8000101a
    03-14 13:52:06.141 477-24743/? V/SoftFFmpegAudio: get pcm params, nChannels:1, nSamplingRate:44100
    03-14 13:52:06.147 477-24744/? E/OMXNodeInstance: OMX_GetExtensionIndex OMX.google.android.index.storeMetaDataInBuffers failed
    03-14 13:52:06.147 477-24744/? E/ACodec: [OMX.google.h264.decoder] storeMetaDataInBuffers failed w/ err -2147483648
    03-14 13:52:06.149 477-24745/? I/SoftFFmpegAudio: got extradata, ignore: 0, size: 2
    03-14 13:52:06.150 477-24745/? I/SoftFFmpegAudio: extradata is ready, size: 2
    03-14 13:52:06.150 477-24745/? D/SoftFFmpegAudio: begin to open ffmpeg audio decoder(aac), mCtx sample_rate: 44100, channels: 1, , sample_fmt: (null)
    03-14 13:52:06.154 477-24745/? D/SoftFFmpegAudio: open ffmpeg audio decoder(aac) success, mCtx sample_rate: 44100, channels: 1, sample_fmt: fltp
    03-14 13:52:06.154 477-24745/? I/SoftFFmpegAudio: Create sample rate converter for conversion of 44100 Hz fltp 1 channels(mono) to 44100 Hz s16 1 channels(mono)!
    03-14 13:52:06.154 477-24743/? V/SoftFFmpegAudio: get pcm params, nChannels:1, nSamplingRate:44100
    03-14 13:52:06.155 477-24739/? D/AudioSink: bufferCount (8) is too small and increased to 12
    03-14 13:52:06.162 477-24747/? E/SoftAVC: Decoder failed: -2
    03-14 13:52:06.162 477-24744/? E/ACodec: [OMX.google.h264.decoder] ERROR(0x80001001)
    03-14 13:52:06.162 477-24744/? E/ACodec: signalError(omxError 0x80001001, internalError -2147483648)
    03-14 13:52:06.163 477-24741/? E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 6
    03-14 13:52:06.167 477-24740/? E/NuPlayerDecoder: Failed to queue input buffer for OMX.google.h264.decoder (err=-38)
    03-14 13:52:06.167 477-16531/? E/NuPlayer: received error(0xffffffda) from video decoder, flushing(0), now shutting down
    03-14 13:52:06.168 10973-11040/com.hobbyte.touringandroid E/MediaPlayer: error (1, -38)
    03-14 13:52:06.168 10973-10973/com.hobbyte.touringandroid E/MediaPlayer: Error (1,-38)
    03-14 13:52:06.168 477-24740/? E/NuPlayerDecoder: failed to flush OMX.google.h264.decoder (err=-38)
    03-14 13:52:06.168 477-16531/? E/NuPlayer: received error(0xffffffda) from video decoder, flushing(2), now shutting down
    03-14 13:52:06.169 10973-10989/com.hobbyte.touringandroid E/MediaPlayer: error (1, -38)
    03-14 13:52:06.170 10973-10973/com.hobbyte.touringandroid E/MediaPlayer: Error (1,-38)

    For reference, here is my class file :

       package com.hobbyte.touringandroid.ui.adapter;

    import android.content.Context;
    import android.graphics.SurfaceTexture;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.util.DisplayMetrics;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.Surface;
    import android.view.TextureView;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.SeekBar;
    import android.widget.TextView;

    import com.google.android.exoplayer.ExoPlayer;
    import com.google.android.exoplayer.FrameworkSampleSource;
    import com.google.android.exoplayer.MediaCodecVideoTrackRenderer;
    import com.google.android.exoplayer.SampleSource;
    import com.google.android.exoplayer.TrackRenderer;
    import com.hobbyte.touringandroid.App;
    import com.hobbyte.touringandroid.tourdata.ListViewItem;
    import com.hobbyte.touringandroid.internet.LoadImageFromURL;
    import com.hobbyte.touringandroid.R;

    import java.io.File;
    import java.io.IOException;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    /**
    * @author Nikita
    */
    public class PoiContentAdapter extends ArrayAdapter<listviewitem> {
       private static final String TAG = "PoiContentAdapter";

       public static final int HEADER = 0;
       public static final int BODY = 1;
       public static final int IMAGE = 2;
       public static final int VIDEO = 3;

       private static Pattern namePattern;
       private static final String FILE_NAME_PATTERN = "https?:\\/\\/[-\\w\\.\\/]*\\/(.+\\.(jpe?g|png|mp4))";

       private ListViewItem[] items;

       private String keyID;

       private TextureView textureView;
       private MediaPlayer player;
       private AudioManager audio;

       private ImageButton play;
       private ImageButton replay;
       private ImageButton mute;
       private ImageButton max;
       private SeekBar volume;

       private String filePath;

       @Override
       public int getViewTypeCount() {
           return 4;
       }

       @Override
           public int getItemViewType(int position) {
           return items[position].getType();
       }

       public PoiContentAdapter(Context context, ListViewItem[] content, String keyID) {
           super(context, 0, content);
           this.keyID = keyID;
           items = content;
           namePattern = Pattern.compile(FILE_NAME_PATTERN);
       }

       /**
        * Inflates a certain view depending on the type of ListViewItem (Normal text or Image URL)
        * @param position Position of item in the ItemList
        * @param view View
        * @param parent ParentView
        * @return the view in question
        */
       @Override
       public View getView(int position, View view, ViewGroup parent) {
           ListViewItem listViewItem = items[position];
           int listViewItemType = getItemViewType(position);
           String filename = null;

           TextView contentView;

           if (listViewItem.getUrl() != null) {
               Matcher m = namePattern.matcher(listViewItem.getUrl());
               if (m.matches()) {
                   filename = m.group(1);
               }
           }

           if (view == null) {
               if (listViewItemType == IMAGE) {
                   view = LayoutInflater.from(getContext()).inflate(R.layout.poi_image, parent, false);
               } else if(listViewItemType == VIDEO) {
                   view = LayoutInflater.from(getContext()).inflate(R.layout.poi_video, parent, false);
               } else {
                   view = LayoutInflater.from(getContext()).inflate(R.layout.poi_content, parent, false);
               }
           }

           switch (listViewItemType) {
               case IMAGE:
                   ImageView imageView = (ImageView) view.findViewById(R.id.poiContentImageView);
                   TextView textView = (TextView) view.findViewById(R.id.poiContentImageDesc);
                   textView.setText(listViewItem.getText());

                   if (filename != null) {
                       new LoadImageFromURL(imageView, App.context).execute(filename, keyID); //Load image in a separate thread
                   }
                   return view;

               case VIDEO:
                   filePath = getContext().getFilesDir() + "/" + String.format("%s/video/%s", keyID, filename);
                   File file = new File(filePath);
                   if(!file.exists()) {
                       view = LayoutInflater.from(getContext()).inflate(R.layout.poi_content, parent, false);
                       contentView = (TextView) view.findViewById(R.id.poiContentTextView);
                       contentView.setText("This contains a video." + "\n" + "Download this tour with Media to see this Video!" + "\n");
                       contentView.setGravity(Gravity.CENTER_HORIZONTAL);
                   } else {
                       System.out.println(filePath);
                       textureView = (TextureView) view.findViewById(R.id.poiContentVideoView);

                       DisplayMetrics metrics = App.context.getResources().getDisplayMetrics();
                       int height = metrics.heightPixels / 2;
                       int width = metrics.widthPixels;
                       textureView.setMinimumHeight(height);
                       textureView.setMinimumWidth(width);

                       play = (ImageButton) view.findViewById(R.id.playButton);
                       replay = (ImageButton) view.findViewById(R.id.replayButtoon);
                       mute = (ImageButton) view.findViewById(R.id.muteButton);
                       max = (ImageButton) view.findViewById(R.id.maxVolButton);
                       volume = (SeekBar) view.findViewById(R.id.volumeControl);
                       audio = (AudioManager) App.context.getSystemService(Context.AUDIO_SERVICE);

                       textureView.setSurfaceTextureListener(videoListener);
                       TextView videoDesc = (TextView) view.findViewById(R.id.poiContentVideoDesc);
                       videoDesc.setText(listViewItem.getText());
                   }
                   return view;
               case HEADER:
                   // TODO
                   if(view.findViewById(R.id.poiContentTextView) == null) {
                       view = LayoutInflater.from(getContext()).inflate(R.layout.poi_content, parent, false);
                   }
                   contentView = (TextView) view.findViewById(R.id.poiContentTextView);
                   contentView.setText(listViewItem.getText() + "\n");
                   if(listViewItem.getText().length() == 0) {
                       return new View(getContext());
                   }
                   return view;
               case BODY:
                   // TODO
                   contentView = (TextView) view.findViewById(R.id.poiContentTextView);
                   contentView.setText(listViewItem.getText() + "\n");
                   return view;
               default:
                   contentView = (TextView) view.findViewById(R.id.poiContentTextView);
                   contentView.setText("Something went wrong\n");
                   return view;
           }
       }

       private TextureView.SurfaceTextureListener videoListener = new TextureView.SurfaceTextureListener() {
           @Override
           public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
               Surface s = new Surface(surface);
               try {
                   player = new MediaPlayer();
                   player.setDataSource(filePath);
                   player.setSurface(s);
                   player.prepareAsync();
                   player.setAudioStreamType(AudioManager.STREAM_MUSIC);
                   player.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT);
                   player.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
                       @Override
                       public void onBufferingUpdate(MediaPlayer mp, int percent) {
                           //Do nothing
                       }
                   });
                   player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                       @Override
                       public void onCompletion(MediaPlayer mp) {
                           //Do nothing
                       }
                   });
                   player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                       @Override
                       public void onPrepared(final MediaPlayer mp) {
                           play.setOnClickListener(new View.OnClickListener() {
                               @Override
                               public void onClick(View v) {
                                   if(mp.isPlaying()) {
                                       mp.pause();
                                       play.setImageResource(R.mipmap.ic_play_arrow_white_36dp);
                                   } else {
                                       mp.start();
                                       play.setImageResource(R.mipmap.ic_pause_white_36dp);
                                   }
                               }
                           });

                           replay.setOnClickListener(new View.OnClickListener() {
                               @Override
                               public void onClick(View v) {
                                   if(mp.isPlaying()) {
                                       play.setImageResource(R.mipmap.ic_play_arrow_white_36dp);
                                       mp.pause();
                                       mp.seekTo(0);
                                   } else {
                                       play.setImageResource(R.mipmap.ic_play_arrow_white_36dp);
                                       mp.seekTo(0);
                                   }
                               }
                           });
                           mute.setOnClickListener(new View.OnClickListener() {
                               @Override
                               public void onClick(View v) {
                                   mp.setVolume(0.0f, 0.0f);
                                   volume.setProgress(0);
                               }
                           });
                           max.setOnClickListener(new View.OnClickListener() {
                               @Override
                               public void onClick(View v) {
                                   mp.setVolume(1.0f, 1.0f);
                                   volume.setProgress(audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
                               }
                           });

                           int maxVolume = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                           int currVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
                           volume.setMax(maxVolume);
                           volume.setProgress(currVolume);
                           volume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                               @Override
                               public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                                   audio.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
                               }

                               @Override
                               public void onStartTrackingTouch(SeekBar seekBar) {

                               }

                               @Override
                               public void onStopTrackingTouch(SeekBar seekBar) {

                               }
                           });
                       }
                   });

                   player.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                       @Override
                       public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                           //Do nothing
                       }
                   });
               } catch (IllegalArgumentException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
               } catch (SecurityException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
               } catch (IllegalStateException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
               } catch (IOException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
               }
           }

           @Override
           public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

           }

           @Override
           public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
               if (player != null) {
                   player.stop();
                   player.release();
                   player = null;
               }
               return true;
           }

           @Override
           public void onSurfaceTextureUpdated(SurfaceTexture surface) {

           }
       };
    }
    </listviewitem>

    I really do not understand in the slightest what is causing all these errors, and why the video file won’t play ?
    If anyone is able to help I will highly highly appreciate it !

    I am using Genymotion Emulator - Google Nexus 4 - API 21

    Thank you very much !

  • AVOptions for video size components

    6 mai 2016, par sharpener

    There is an option for declaring video size :

    av_dict_set(&amp;options, "video_size", "1920x1080", 0);

    Are there any equivalent options for the size components ? Like :

    av_dict_set_int(&amp;options, VIDEO_WIDTH_OPT_STR , 1920, 0);
    av_dict_set_int(&amp;options, VIDEO_HEIGHT_OPT_STR, 1080, 0);

    What would be the values for those macros (if any) ?

    #define VIDEO_WIDTH_OPT_STR  "?"
    #define VIDEO_HEIGHT_OPT_STR "?"

    Please note I’m aware of man snprintf, that’s not my concern, thank you.

  • Using ffmpeg.exe making the computer slow in task manager it takes over 1GB of memory how can i fix it ?

    29 mai 2013, par Revuen Ben Dror

    In mt Form1 i have this code :

    private void StartRecording_Click(object sender, EventArgs e)
           {

               ffmp.Start("test.avi", 25);
               timer1.Enabled = true;
           }

    ffmp is a variable of my class : Ffmpeg
    In this class i add frames to a pipe and create an avi file.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Drawing;
    using System.IO.Pipes;
    using System.Runtime.InteropServices;
    using System.Diagnostics;

    namespace ScreenVideoRecorder
    {
       class Ffmpeg
       {
           NamedPipeServerStream p;
           String pipename = "mytestpipe";
           byte[] b;
           System.Diagnostics.Process process;

           public Ffmpeg()
           {

           }

           public void Start(string FileName, int BitmapRate)
           {
               p = new NamedPipeServerStream(pipename, PipeDirection.Out, 1, PipeTransmissionMode.Byte);
               b = new byte[1920 * 1080 * 3]; // some buffer for the r g and b of pixels of an image of size 720p
               process = new System.Diagnostics.Process();
               process.StartInfo.FileName = @"D:\pipetest\pipetest\ffmpegx86\ffmpeg.exe";
               process.EnableRaisingEvents = false;
               process.StartInfo.WorkingDirectory = @"D:\pipetest\pipetest\ffmpegx86";
               process.StartInfo.Arguments = @"-f rawvideo -pix_fmt bgr0 -video_size 1920x1080 -i \\.\pipe\mytestpipe -map 0 -c:v libx264 -r " + BitmapRate + " " + FileName;
               process.Start();

               process.StartInfo.UseShellExecute = false;
               process.StartInfo.CreateNoWindow = false;

               p.WaitForConnection();
           }

           public void PushFrame(Bitmap bmp)
           {

               int length;
               // Lock the bitmap&#39;s bits.
               Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
               //Rectangle rect = new Rectangle(0, 0, 1280, 720);
               System.Drawing.Imaging.BitmapData bmpData =
                   bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly,
                   bmp.PixelFormat);

               int absStride = Math.Abs(bmpData.Stride);
               // Get the address of the first line.
               IntPtr ptr = bmpData.Scan0;

               // Declare an array to hold the bytes of the bitmap.
               //length = 3 * bmp.Width * bmp.Height;
               length = absStride * bmpData.Height;
               byte[] rgbValues = new byte[length];

               int j = bmp.Height - 1;
               for (int i = 0; i &lt; bmp.Height; i++)
               {
                   IntPtr pointer = new IntPtr(bmpData.Scan0.ToInt32() + (bmpData.Stride * j));
                   System.Runtime.InteropServices.Marshal.Copy(pointer, rgbValues, absStride * (bmp.Height - i - 1), absStride);
                   j--;
               }

               p.Write(rgbValues, 0, length);

               bmp.UnlockBits(bmpData);

           public void Close()
           {
               p.Close();
           }
       }
    }

    The problem is when i'm running my application in this from my visual studio 2012 pro and click the button it's openning a console window and start the processing .

    I tracked over it through the task manager on ffmpeg.exe and saw that it started from 996mb and very quick jumped ot 1040mb memory usage. The cpu usage was only 16%

    Once i close ended this task the ffmpeg.exe everything was back to move smooth.
    When it's working and i tried to drag my Form around the screen for example it was moving slow and also with some stuttering .

    Closed the ffmpeg.exe and i could drag the Form around smooth and quick like in regular way as it should be.

    I tried to google for it and found some others with the same problem i think but i'm not sure where is the problem and how to fix it.

    I'm not sure what version of ffmpeg.exe i have i'm using now but i read in some places that it's not working better with new versions but maybe i mistake here .

    My windows is 8 with 6gb of ram .