Recherche avancée

Médias (17)

Mot : - Tags -/wired

Autres articles (38)

  • (Dés)Activation de fonctionnalités (plugins)

    18 février 2011, par

    Pour 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 (...)

  • Installation en mode ferme

    4 février 2011, par

    Le mode ferme permet d’héberger plusieurs sites de type MediaSPIP en n’installant qu’une seule fois son noyau fonctionnel.
    C’est la méthode que nous utilisons sur cette même plateforme.
    L’utilisation en mode ferme nécessite de connaïtre un peu le mécanisme de SPIP contrairement à la version standalone qui ne nécessite pas réellement de connaissances spécifique puisque l’espace privé habituel de SPIP n’est plus utilisé.
    Dans un premier temps, vous devez avoir installé les mêmes fichiers que l’installation (...)

  • 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 (...)

Sur d’autres sites (8097)

  • Why is ffmpeg start time non-zero in .ts format ?

    22 janvier 2014, par geekydel

    I'm using ffmpeg to transcode video to .ts format, and I am getting unexpected start times in the output file.

    To simplify things, I've started with a nice simple AVI file (no audio) :

    ffmpeg -i in.avi
    ...
    Input #0, avi, from 'in.avi':
     Metadata:
       encoder         : Lavf55.25.100
     Duration: 00:00:05.00, start: 0.000000, bitrate: 448 kb/s
       Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 480x270 [SAR 1:1 DAR 16:9], 24 tbr, 24 tbn, 24 tbc

    Duration=5s, startTime=0s, as expected.

    However, if I transcode to .ts file, with no customisation :

    ffmpeg -i in.avi -y out.ts
    ...
    Input #0, avi, from 'in.avi':
     Metadata:
       encoder         : Lavf55.25.100
     Duration: 00:00:05.00, start: 0.000000, bitrate: 448 kb/s
       Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 480x270 [SAR 1:1 DAR 16:9], 24 tbr, 24 tbn, 24 tbc
    Output #0, mpegts, to 'out.ts':
     Metadata:
       encoder         : Lavf55.25.100
       Stream #0:0: Video: mpeg2video, yuv420p, 480x270 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 24 tbc
    Stream mapping:
     Stream #0:0 -> #0:0 (mpeg4 -> mpeg2video)
    Press [q] to stop, [?] for help
    frame=  120 fps=0.0 q=31.0 Lsize=     315kB time=00:00:04.95 bitrate= 519.9kbits/s dup=1 drop=0    
    video:277kB audio:0kB subtitle:0 global headers:0kB muxing overhead 13.491544%

    Then I get a very odd parameters (Duration=4:96s, startTime=1.441667) :

    ffmpeg -i out.ts
    ...
    Input #0, mpegts, from 'out.ts':
     Duration: 00:00:04.96, start: 1.441667, bitrate: 519 kb/s
     Program 1
       Metadata:
         service_name    : Service01
         service_provider: FFmpeg
       Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv), 480x270 [SAR 1:1 DAR 16:9], max. 104857 kb/s, 24 fps, 24 tbr, 90k tbn, 48 tbc

    Now, I can just about understand why the transcode might lose a couple of frames, which explains the duration, but I can't see why the start time should be any different to the AVI file's start time.

    I have tried transcoding to .mp4, .webm and .mov, and in each case we get the 'correct' start time of 0.0s. Can anybody help explain why .ts files behave differently ?

    Thanks in advance !

    (ffmpeg version information :)

    ffmpeg version N-60031-ga459891 Copyright (c) 2000-2014 the FFmpeg developers
     built on Jan 21 2014 05:31:54 with gcc 4.6 (Debian 4.6.3-1)
     configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
     libavutil      52. 63.100 / 52. 63.100
     libavcodec     55. 48.102 / 55. 48.102
     libavformat    55. 25.100 / 55. 25.100
     libavdevice    55.  5.102 / 55.  5.102
     libavfilter     4.  1.100 /  4.  1.100
     libswscale      2.  5.101 /  2.  5.101
     libswresample   0. 17.104 /  0. 17.104
     libpostproc    52.  3.100 / 52.  3.100
  • Youtue Watch Me Android application closing unexpectedly

    18 septembre 2015, par Kichu

    I create android application from https://github.com/youtube/yt-watchme.

    When I try to create the event using the "CREATE LIVE EVENT" button.It throws some following error. I think it’s happening due to the camera permission issue.

    ERROR :

    09-17 11:43:53.582  32383-32383/com.google.android.apps.watchme E/AndroidRuntime﹕ FATAL EXCEPTION: main
       Process: com.google.android.apps.watchme, PID: 32383
       java.lang.NoSuchMethodError: com.google.android.apps.watchme.StreamerActivity.checkSelfPermission
               at com.google.android.apps.watchme.StreamerActivity.startStreaming(StreamerActivity.java:174)
               at com.google.android.apps.watchme.StreamerActivity.access$200(StreamerActivity.java:46)
               at com.google.android.apps.watchme.StreamerActivity$1.onServiceConnected(StreamerActivity.java:63)
               at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1110)
               at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1127)
               at android.os.Handler.handleCallback(Handler.java:733)
               at android.os.Handler.dispatchMessage(Handler.java:95)
               at android.os.Looper.loop(Looper.java:136)
               at android.app.ActivityThread.main(ActivityThread.java:5097)
               at java.lang.reflect.Method.invokeNative(Native Method)
               at java.lang.reflect.Method.invoke(Method.java:515)
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
               at dalvik.system.NativeStart.main(Native Method)

    Any one please suggest . How can I solve this issue.

    Thanks In Advance

    Code Update :

    Manifest file XML

    <manifest package="com.google.android.apps.watchme">


       
       
       
       
       
       
       
       
       

       
       

       <application>
           <activity>
               
                   <action></action>

                   <category></category>
               
           </activity>
           <activity></activity>

           <service></service>
       </application>
       
    </manifest>

    Stream Activity File

    /*
    * Copyright (c) 2014 Google Inc.
    *
    * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
    * in compliance with the License. You may obtain a copy of the License at
    *
    * http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software distributed under the License
    * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
    * or implied. See the License for the specific language governing permissions and limitations under
    * the License.
    */

    package com.google.android.apps.watchme;

    import android.Manifest;
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.content.pm.PackageManager;
    import android.hardware.Camera;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.os.PowerManager;
    import android.support.design.widget.Snackbar;
    import android.support.v4.app.ActivityCompat;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ToggleButton;

    import com.google.android.apps.watchme.util.Utils;
    import com.google.android.apps.watchme.util.YouTubeApi;

    import java.util.ArrayList;
    import java.util.List;

    /**
    * @author Ibrahim Ulukaya &lt;ulukaya@google.com&gt;
    *         <p></p>
    *         StreamerActivity class which previews the camera and streams via StreamerService.
    */
    public class StreamerActivity extends Activity {
       // CONSTANTS
       // TODO: Stop hardcoding this and read values from the camera's supported sizes.
       public static final int CAMERA_WIDTH = 640;
       public static final int CAMERA_HEIGHT = 480;
       private static final int REQUEST_CAMERA_MICROPHONE = 0;

       // Member variables
       private StreamerService streamerService;
       private ServiceConnection streamerConnection = new ServiceConnection() {
           @Override
           public void onServiceConnected(ComponentName className, IBinder service) {
               Log.d(MainActivity.APP_NAME, "onServiceConnected");

               streamerService = ((StreamerService.LocalBinder) service).getService();

               restoreStateFromService();
               startStreaming();
           }

           @Override
           public void onServiceDisconnected(ComponentName className) {
               Log.e(MainActivity.APP_NAME, "onServiceDisconnected");

               // This should never happen, because our service runs in the same process.
               streamerService = null;
           }
       };
       private PowerManager.WakeLock wakeLock;
       private Preview preview;
       private String rtmpUrl;
       private String broadcastId;

       @Override
       public void onCreate(Bundle savedInstanceState) {
           Log.d(MainActivity.APP_NAME, "onCreate");
           super.onCreate(savedInstanceState);

           broadcastId = getIntent().getStringExtra(YouTubeApi.BROADCAST_ID_KEY);
           //Log.v(MainActivity.APP_NAME, broadcastId);

           rtmpUrl = getIntent().getStringExtra(YouTubeApi.RTMP_URL_KEY);

           if (rtmpUrl == null) {
               Log.w(MainActivity.APP_NAME, "No RTMP URL was passed in; bailing.");
               finish();
           }
           Log.i(MainActivity.APP_NAME, String.format("Got RTMP URL '%s' from calling activity.", rtmpUrl));

           setContentView(R.layout.streamer);
           preview = (Preview) findViewById(R.id.surfaceViewPreview);

           if (!bindService(new Intent(this, StreamerService.class), streamerConnection,
                   BIND_AUTO_CREATE | BIND_DEBUG_UNBIND)) {
               Log.e(MainActivity.APP_NAME, "Failed to bind StreamerService!");
           }

           final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleBroadcasting);
           toggleButton.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                   if (toggleButton.isChecked()) {
                       streamerService.startStreaming(rtmpUrl);
                   } else {
                       streamerService.stopStreaming();
                   }
               }
           });
       }

       @Override
       protected void onResume() {
           Log.d(MainActivity.APP_NAME, "onResume");

           super.onResume();

           if (streamerService != null) {
               restoreStateFromService();
           }
       }

       @Override
       protected void onPause() {
           Log.d(MainActivity.APP_NAME, "onPause");

           super.onPause();

           if (preview != null) {
               preview.setCamera(null);
           }

           if (streamerService != null) {
               streamerService.releaseCamera();
           }
       }

       @Override
       protected void onDestroy() {
           Log.d(MainActivity.APP_NAME, "onDestroy");

           super.onDestroy();

           if (streamerConnection != null) {
               unbindService(streamerConnection);
           }

           stopStreaming();

           if (streamerService != null) {
               streamerService.releaseCamera();
           }
       }

       private void restoreStateFromService() {
           preview.setCamera(Utils.getCamera(Camera.CameraInfo.CAMERA_FACING_FRONT));
       }

       private void startStreaming() {
           Log.d(MainActivity.APP_NAME, "startStreaming");

           PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
           wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this.getClass().getName());
           wakeLock.acquire();

           if (!streamerService.isStreaming()) {

               String cameraPermission = Manifest.permission.CAMERA;
               String microphonePermission = Manifest.permission.RECORD_AUDIO;
               int hasCamPermission = checkSelfPermission(cameraPermission);
               int hasMicPermission = checkSelfPermission(microphonePermission);
               List<string> permissions = new ArrayList<string>();
               if (hasCamPermission != PackageManager.PERMISSION_GRANTED) {
                   permissions.add(cameraPermission);
                   if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                           Manifest.permission.CAMERA)) {
                       // Provide rationale in Snackbar to request permission
                       Snackbar.make(preview, R.string.permission_camera_rationale,
                               Snackbar.LENGTH_INDEFINITE).show();
                   } else {
                       // Explain in Snackbar to turn on permission in settings
                       Snackbar.make(preview, R.string.permission_camera_explain,
                               Snackbar.LENGTH_INDEFINITE).show();
                   }
               }
               if (hasMicPermission != PackageManager.PERMISSION_GRANTED) {
                   permissions.add(microphonePermission);
                   if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                           Manifest.permission.RECORD_AUDIO)) {
                       // Provide rationale in Snackbar to request permission
                       Snackbar.make(preview, R.string.permission_microphone_rationale,
                               Snackbar.LENGTH_INDEFINITE).show();
                   } else {
                       // Explain in Snackbar to turn on permission in settings
                       Snackbar.make(preview, R.string.permission_microphone_explain,
                               Snackbar.LENGTH_INDEFINITE).show();
                   }
               }
               if (!permissions.isEmpty()) {
                   String[] params = permissions.toArray(new String[permissions.size()]);
                   ActivityCompat.requestPermissions(this, params, REQUEST_CAMERA_MICROPHONE);
               } else {
                   // We already have permission, so handle as normal
                   streamerService.startStreaming(rtmpUrl);
               }
           }
       }

       /**
        * Callback received when a permissions request has been completed.
        */
       @Override
       public void onRequestPermissionsResult(int requestCode,
                                              String permissions[], int[] grantResults) {
           switch (requestCode) {
               case REQUEST_CAMERA_MICROPHONE: {
                   Log.i(MainActivity.APP_NAME, "Received response for camera with mic permissions request.");

                   // We have requested multiple permissions for contacts, so all of them need to be
                   // checked.
                   if (Utils.verifyPermissions(grantResults)) {
                       // permissions were granted, yay! do the
                       // streamer task you need to do.
                       streamerService.startStreaming(rtmpUrl);
                   } else {
                       Log.i(MainActivity.APP_NAME, "Camera with mic permissions were NOT granted.");
                       Snackbar.make(preview, R.string.permissions_not_granted,
                               Snackbar.LENGTH_SHORT)
                               .show();
                   }
                   break;
               }

               // other 'switch' lines to check for other
               // permissions this app might request
           }
           return;
       }


       private void stopStreaming() {
           Log.d(MainActivity.APP_NAME, "stopStreaming");

           if (wakeLock != null) {
               wakeLock.release();
               wakeLock = null;
           }

           if (streamerService.isStreaming()) {
               streamerService.stopStreaming();
           }
       }

       public void endEvent(View view) {
           Intent data = new Intent();
           data.putExtra(YouTubeApi.BROADCAST_ID_KEY, broadcastId);
           if (getParent() == null) {
               setResult(Activity.RESULT_OK, data);
           } else {
               getParent().setResult(Activity.RESULT_OK, data);
           }
           finish();
       }

    }
    </string></string>

    Update ERROR CODE :

    08:57:14.447  18829-18829/com.google.android.apps.watchme E/AndroidRuntime﹕ FATAL EXCEPTION: main
       Process: com.google.android.apps.watchme, PID: 18829
       java.lang.UnsatisfiedLinkError: Couldn't load ffmpeg from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.google.android.apps.watchme-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.google.android.apps.watchme-1, /vendor/lib, /system/lib]]]: findLibrary returned null
               at java.lang.Runtime.loadLibrary(Runtime.java:358)
               at java.lang.System.loadLibrary(System.java:526)
               at com.google.android.apps.watchme.Ffmpeg.<clinit>(Ffmpeg.java:26)
               at com.google.android.apps.watchme.VideoStreamingConnection.open(VideoStreamingConnection.java:71)
               at com.google.android.apps.watchme.StreamerService.startStreaming(StreamerService.java:80)
               at com.google.android.apps.watchme.StreamerActivity.startStreaming(StreamerActivity.java:212)
               at com.google.android.apps.watchme.StreamerActivity.access$200(StreamerActivity.java:47)
               at com.google.android.apps.watchme.StreamerActivity$1.onServiceConnected(StreamerActivity.java:64)
               at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1110)
               at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1127)
               at android.os.Handler.handleCallback(Handler.java:733)
               at android.os.Handler.dispatchMessage(Handler.java:95)
               at android.os.Looper.loop(Looper.java:136)
               at android.app.ActivityThread.main(ActivityThread.java:5097)
               at java.lang.reflect.Method.invokeNative(Native Method)
               at java.lang.reflect.Method.invoke(Method.java:515)
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
               at dalvik.system.NativeStart.main(Native Method)
    </clinit>
  • Youtube Watch Me Android application closing unexpectedly

    18 septembre 2015, par Kichu

    I create android application from https://github.com/youtube/yt-watchme.

    When I try to create the event using the "CREATE LIVE EVENT" button.It throws some following error. I think it’s happening due to the camera permission issue.

    ERROR :

    09-17 11:43:53.582  32383-32383/com.google.android.apps.watchme E/AndroidRuntime﹕ FATAL EXCEPTION: main
       Process: com.google.android.apps.watchme, PID: 32383
       java.lang.NoSuchMethodError: com.google.android.apps.watchme.StreamerActivity.checkSelfPermission
               at com.google.android.apps.watchme.StreamerActivity.startStreaming(StreamerActivity.java:174)
               at com.google.android.apps.watchme.StreamerActivity.access$200(StreamerActivity.java:46)
               at com.google.android.apps.watchme.StreamerActivity$1.onServiceConnected(StreamerActivity.java:63)
               at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1110)
               at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1127)
               at android.os.Handler.handleCallback(Handler.java:733)
               at android.os.Handler.dispatchMessage(Handler.java:95)
               at android.os.Looper.loop(Looper.java:136)
               at android.app.ActivityThread.main(ActivityThread.java:5097)
               at java.lang.reflect.Method.invokeNative(Native Method)
               at java.lang.reflect.Method.invoke(Method.java:515)
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
               at dalvik.system.NativeStart.main(Native Method)

    Any one please suggest . How can I solve this issue.

    Thanks In Advance

    Code Update :

    Manifest file XML

    <manifest package="com.google.android.apps.watchme">


       
       
       
       
       
       
       
       
       

       
       

       <application>
           <activity>
               
                   <action></action>

                   <category></category>
               
           </activity>
           <activity></activity>

           <service></service>
       </application>
       
    </manifest>

    Stream Activity File

    /*
    * Copyright (c) 2014 Google Inc.
    *
    * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
    * in compliance with the License. You may obtain a copy of the License at
    *
    * http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software distributed under the License
    * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
    * or implied. See the License for the specific language governing permissions and limitations under
    * the License.
    */

    package com.google.android.apps.watchme;

    import android.Manifest;
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.content.pm.PackageManager;
    import android.hardware.Camera;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.os.PowerManager;
    import android.support.design.widget.Snackbar;
    import android.support.v4.app.ActivityCompat;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ToggleButton;

    import com.google.android.apps.watchme.util.Utils;
    import com.google.android.apps.watchme.util.YouTubeApi;

    import java.util.ArrayList;
    import java.util.List;

    /**
    * @author Ibrahim Ulukaya &lt;ulukaya@google.com&gt;
    *         <p></p>
    *         StreamerActivity class which previews the camera and streams via StreamerService.
    */
    public class StreamerActivity extends Activity {
       // CONSTANTS
       // TODO: Stop hardcoding this and read values from the camera's supported sizes.
       public static final int CAMERA_WIDTH = 640;
       public static final int CAMERA_HEIGHT = 480;
       private static final int REQUEST_CAMERA_MICROPHONE = 0;

       // Member variables
       private StreamerService streamerService;
       private ServiceConnection streamerConnection = new ServiceConnection() {
           @Override
           public void onServiceConnected(ComponentName className, IBinder service) {
               Log.d(MainActivity.APP_NAME, "onServiceConnected");

               streamerService = ((StreamerService.LocalBinder) service).getService();

               restoreStateFromService();
               startStreaming();
           }

           @Override
           public void onServiceDisconnected(ComponentName className) {
               Log.e(MainActivity.APP_NAME, "onServiceDisconnected");

               // This should never happen, because our service runs in the same process.
               streamerService = null;
           }
       };
       private PowerManager.WakeLock wakeLock;
       private Preview preview;
       private String rtmpUrl;
       private String broadcastId;

       @Override
       public void onCreate(Bundle savedInstanceState) {
           Log.d(MainActivity.APP_NAME, "onCreate");
           super.onCreate(savedInstanceState);

           broadcastId = getIntent().getStringExtra(YouTubeApi.BROADCAST_ID_KEY);
           //Log.v(MainActivity.APP_NAME, broadcastId);

           rtmpUrl = getIntent().getStringExtra(YouTubeApi.RTMP_URL_KEY);

           if (rtmpUrl == null) {
               Log.w(MainActivity.APP_NAME, "No RTMP URL was passed in; bailing.");
               finish();
           }
           Log.i(MainActivity.APP_NAME, String.format("Got RTMP URL '%s' from calling activity.", rtmpUrl));

           setContentView(R.layout.streamer);
           preview = (Preview) findViewById(R.id.surfaceViewPreview);

           if (!bindService(new Intent(this, StreamerService.class), streamerConnection,
                   BIND_AUTO_CREATE | BIND_DEBUG_UNBIND)) {
               Log.e(MainActivity.APP_NAME, "Failed to bind StreamerService!");
           }

           final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleBroadcasting);
           toggleButton.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                   if (toggleButton.isChecked()) {
                       streamerService.startStreaming(rtmpUrl);
                   } else {
                       streamerService.stopStreaming();
                   }
               }
           });
       }

       @Override
       protected void onResume() {
           Log.d(MainActivity.APP_NAME, "onResume");

           super.onResume();

           if (streamerService != null) {
               restoreStateFromService();
           }
       }

       @Override
       protected void onPause() {
           Log.d(MainActivity.APP_NAME, "onPause");

           super.onPause();

           if (preview != null) {
               preview.setCamera(null);
           }

           if (streamerService != null) {
               streamerService.releaseCamera();
           }
       }

       @Override
       protected void onDestroy() {
           Log.d(MainActivity.APP_NAME, "onDestroy");

           super.onDestroy();

           if (streamerConnection != null) {
               unbindService(streamerConnection);
           }

           stopStreaming();

           if (streamerService != null) {
               streamerService.releaseCamera();
           }
       }

       private void restoreStateFromService() {
           preview.setCamera(Utils.getCamera(Camera.CameraInfo.CAMERA_FACING_FRONT));
       }

       private void startStreaming() {
           Log.d(MainActivity.APP_NAME, "startStreaming");

           PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
           wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this.getClass().getName());
           wakeLock.acquire();

           if (!streamerService.isStreaming()) {

               String cameraPermission = Manifest.permission.CAMERA;
               String microphonePermission = Manifest.permission.RECORD_AUDIO;
               int hasCamPermission = checkSelfPermission(cameraPermission);
               int hasMicPermission = checkSelfPermission(microphonePermission);
               List<string> permissions = new ArrayList<string>();
               if (hasCamPermission != PackageManager.PERMISSION_GRANTED) {
                   permissions.add(cameraPermission);
                   if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                           Manifest.permission.CAMERA)) {
                       // Provide rationale in Snackbar to request permission
                       Snackbar.make(preview, R.string.permission_camera_rationale,
                               Snackbar.LENGTH_INDEFINITE).show();
                   } else {
                       // Explain in Snackbar to turn on permission in settings
                       Snackbar.make(preview, R.string.permission_camera_explain,
                               Snackbar.LENGTH_INDEFINITE).show();
                   }
               }
               if (hasMicPermission != PackageManager.PERMISSION_GRANTED) {
                   permissions.add(microphonePermission);
                   if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                           Manifest.permission.RECORD_AUDIO)) {
                       // Provide rationale in Snackbar to request permission
                       Snackbar.make(preview, R.string.permission_microphone_rationale,
                               Snackbar.LENGTH_INDEFINITE).show();
                   } else {
                       // Explain in Snackbar to turn on permission in settings
                       Snackbar.make(preview, R.string.permission_microphone_explain,
                               Snackbar.LENGTH_INDEFINITE).show();
                   }
               }
               if (!permissions.isEmpty()) {
                   String[] params = permissions.toArray(new String[permissions.size()]);
                   ActivityCompat.requestPermissions(this, params, REQUEST_CAMERA_MICROPHONE);
               } else {
                   // We already have permission, so handle as normal
                   streamerService.startStreaming(rtmpUrl);
               }
           }
       }

       /**
        * Callback received when a permissions request has been completed.
        */
       @Override
       public void onRequestPermissionsResult(int requestCode,
                                              String permissions[], int[] grantResults) {
           switch (requestCode) {
               case REQUEST_CAMERA_MICROPHONE: {
                   Log.i(MainActivity.APP_NAME, "Received response for camera with mic permissions request.");

                   // We have requested multiple permissions for contacts, so all of them need to be
                   // checked.
                   if (Utils.verifyPermissions(grantResults)) {
                       // permissions were granted, yay! do the
                       // streamer task you need to do.
                       streamerService.startStreaming(rtmpUrl);
                   } else {
                       Log.i(MainActivity.APP_NAME, "Camera with mic permissions were NOT granted.");
                       Snackbar.make(preview, R.string.permissions_not_granted,
                               Snackbar.LENGTH_SHORT)
                               .show();
                   }
                   break;
               }

               // other 'switch' lines to check for other
               // permissions this app might request
           }
           return;
       }


       private void stopStreaming() {
           Log.d(MainActivity.APP_NAME, "stopStreaming");

           if (wakeLock != null) {
               wakeLock.release();
               wakeLock = null;
           }

           if (streamerService.isStreaming()) {
               streamerService.stopStreaming();
           }
       }

       public void endEvent(View view) {
           Intent data = new Intent();
           data.putExtra(YouTubeApi.BROADCAST_ID_KEY, broadcastId);
           if (getParent() == null) {
               setResult(Activity.RESULT_OK, data);
           } else {
               getParent().setResult(Activity.RESULT_OK, data);
           }
           finish();
       }

    }
    </string></string>

    Update ERROR CODE :

    08:57:14.447  18829-18829/com.google.android.apps.watchme E/AndroidRuntime﹕ FATAL EXCEPTION: main
       Process: com.google.android.apps.watchme, PID: 18829
       java.lang.UnsatisfiedLinkError: Couldn't load ffmpeg from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.google.android.apps.watchme-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.google.android.apps.watchme-1, /vendor/lib, /system/lib]]]: findLibrary returned null
               at java.lang.Runtime.loadLibrary(Runtime.java:358)
               at java.lang.System.loadLibrary(System.java:526)
               at com.google.android.apps.watchme.Ffmpeg.<clinit>(Ffmpeg.java:26)
               at com.google.android.apps.watchme.VideoStreamingConnection.open(VideoStreamingConnection.java:71)
               at com.google.android.apps.watchme.StreamerService.startStreaming(StreamerService.java:80)
               at com.google.android.apps.watchme.StreamerActivity.startStreaming(StreamerActivity.java:212)
               at com.google.android.apps.watchme.StreamerActivity.access$200(StreamerActivity.java:47)
               at com.google.android.apps.watchme.StreamerActivity$1.onServiceConnected(StreamerActivity.java:64)
               at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1110)
               at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1127)
               at android.os.Handler.handleCallback(Handler.java:733)
               at android.os.Handler.dispatchMessage(Handler.java:95)
               at android.os.Looper.loop(Looper.java:136)
               at android.app.ActivityThread.main(ActivityThread.java:5097)
               at java.lang.reflect.Method.invokeNative(Native Method)
               at java.lang.reflect.Method.invoke(Method.java:515)
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
               at dalvik.system.NativeStart.main(Native Method)
    </clinit>