Recherche avancée

Médias (29)

Mot : - Tags -/Musique

Autres articles (96)

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • MediaSPIP 0.1 Beta version

    25 avril 2011, par

    MediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

  • Demande de création d’un canal

    12 mars 2010, par

    En fonction de la configuration de la plateforme, l’utilisateur peu avoir à sa disposition deux méthodes différentes de demande de création de canal. La première est au moment de son inscription, la seconde, après son inscription en remplissant un formulaire de demande.
    Les deux manières demandent les mêmes choses fonctionnent à peu près de la même manière, le futur utilisateur doit remplir une série de champ de formulaire permettant tout d’abord aux administrateurs d’avoir des informations quant à (...)

Sur d’autres sites (7211)

  • 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>
  • Issues with processing media on windows Azure

    23 septembre 2015, par Ahmed Mujtaba

    I have a website built on ASP.NET web forms that works as a media portal for users to upload videos. I’m using ffmpeg encoders to produce video contents to be streamed in the browser. I’m using the web deploy method to publish the site on the Azure server. The website get’s deployed properly however I get following issues in the live site.

    1. Video never get’s encoded and published. I get some sort of error.

    2. Video get’s published but the process of uploading and encoding the video is way too slow on the web server.

    My project solution contains upload.ashx that handles the upload requests and makes the call to encode.ashx which is responsible for the encoding and publishing of the videos. I tried to remotely debug the site but the debugger never get’s to encode.ashx.

    I was wondering if these issues can be resolved by having the website deployed with a VM ?

    Script that uploads the video file :

    var filesuploaded = 0;
       var faileduploaded = 0;

       $(function () {
           var uploader = new plupload.Uploader({
               runtimes: 'gears,html5,flash,silverlight,browserplus',
               browse_button: '&lt;%= pickfiles.ClientID %>',
               container: 'container',
               max_file_size: '&lt;%= MaxMediaSize %>mb',
               url: '&lt;%=Config.GetUrl() %>videos/upload/upload.ashx',
               flash_swf_url: '&lt;%=Config.GetUrl() %>plupload/js/plupload.flash.swf',
               silverlight_xap_url: '&lt;%=Config.GetUrl() %>plupload/js/plupload.silverlight.xap',
               chunk_size: '4mb',
               &lt;%= UniqueNames %>
               filters: [
               { title: '&lt;%= AllowedFormatsDisplay %>', extensions: '&lt;%= AllowedFormats %>'}],
               headers: { UName: '&lt;%=UserName %>', MTP: '&lt;%= MediaType %>' }
           });
           //uploader.bind('Init', function (up, params) {
           //    $('#filelist').html("<div>Current runtime: " + params.runtime + "</div>");
           //});

           uploader.init();

           $('#uploadfiles').click(function (e) {
               uploader.start();
               e.preventDefault();
               $("#uploadfiles").hide();
               $("#&lt;%= embd.ClientID %>").hide();
           });

           uploader.bind('FilesAdded', function (up, files) {
               $("#uploadfiles").show();
               $("#&lt;%= msg.ClientID %>").html("");
               var count=0;
               $.each(files, function (i, file) {
                   $('#filelist').append(
                       '<div class="item_pad_4 bx_br_bt">' + (count + 1) + ': ' + file.name + ' (' + plupload.formatSize(file.size) + ')  <b></b></div>' );
                   count++;
               });
               var maxupload = &lt;%= MaxVideoUploads %>;
               if(count > maxupload)
               {              
                   $.each(files, function(i, file) {
                       uploader.removeFile(file);
                   });

                   $('#filelist').html("");
                   $("#uploadfiles").hide();
                   Display_Message("#&lt;%= msg.ClientID %>", "Can't upload more than " + maxupload + " records at once!", 1, 1);
                   return false;
               }
               else {
                   $("#tfiles").html(count);
                   $("#uploadfiles").removeClass("disabled");
                   $("#&lt;%= pickfiles.ClientID %>").hide();
               }
               up.refresh(); // Reposition Flash/Silverlight
           });

           uploader.bind('UploadProgress', function (up, file) {
               $('#' + file.id + " b").html(file.percent + "%");
           });

           uploader.bind('Error', function (up, err) {
               $('#filelist').append("<div>Error: " + err.code +
                   ", Message: " + err.message +
                   (err.file ? ", File: " + err.file.name : "") +
                   "</div>"
               );
               up.refresh(); // Reposition Flash/Silverlight
           });

           var failedstatus = 0;
           uploader.bind('FileUploaded', function (up, file, info) {
               // encode started
               if (info.response != "failed" &amp;&amp; info.response != "") {
                   EncodeVD(file.id, info.response, file.size);
                   Display_Message('#' + file.id, "Please wait for final processing", 0, 1);
                   if (failedstatus == 0)
                       Redirect(info.response);
                   filesuploaded++;
               }
               else {
                   Display_Message('#' + file.id, "Response is: " + info.response, 0, 1);
               }
           });
       });
       var redcnt = 0;
       function Redirect(filename) {
           var IntervalID = setInterval(function () {
               redcnt++;
               if (redcnt > 2) {
                   clearInterval(IntervalID);
                   var tfiles = $("#tfiles").html();
                   if(tfiles == faileduploaded) { // break further processing all videos failed to upload
                   }
                   else if (filesuploaded >= tfiles) {
                       document.location = "&lt;%=ConfirmPageUrl %>?fn=" + filename + "&amp;gid=&lt;%=GalleryID %>&amp;uvids=" + $("#tfiles").html() + "&amp;mpid=" + $("#maxpid").html().trim() + "&lt;%=GroupParam %>";
                   }
           }
           }, 2000);
    }
    function EncodeVD(mid, mfile, msize) {
       var params = '&lt;%= EncodingParams %>&amp;fn=' + mfile;
           $.ajax({
               type: 'GET',
               url: '&lt;%= Encoding_Handler_Path %>',
               data: params,
               async: true,
               success: function (msg) {
                   if (msg == "Success" || msg == "") {
                       $('#' + mid).html('<strong>Uploading Completed Successfully - Wait for Processing.');
                   }
                   else {
                       failedstatus = 1;
                       faileduploaded++;
                       Display_Message('#' + mid, "Response is: " + msg, 0, 1);
                   }
               }
           });
       }
    </strong>

    Server side code for processing the file upload :

    private int MediaType = 0; // 0 : video, 1: audio

       public void ProcessRequest (HttpContext context) {
           try
           {
               context.Response.ContentType = "text/plain";
               context.Response.Write(ProcessMedia(context));
           }
           catch (Exception ex)
           {
               context.Response.Write("error|" + ex.Message);
           }
       }

       public string ProcessMedia(HttpContext context)
       {
           if (context.Request.Files.Count > 0)
           {
               int chunk = context.Request["chunk"] != null ? int.Parse(context.Request["chunk"]) : 0;
               string fileName = context.Request["name"] != null ? context.Request["name"] : string.Empty;
               //string _fileName = fileName.Remove(fileName.LastIndexOf(".")) + "-" + Guid.NewGuid().ToString().Substring(0, 6) + "" + fileName.Remove(0, fileName.LastIndexOf("."));
               HttpPostedFile fileUpload = context.Request.Files[0];

               string upath = "";
               if (context.Request.Headers["UName"] != null)
                   upath = context.Request.Headers["UName"].ToString();

               //if (CloudSettings.EnableCloudStorage &amp;&amp; upath != "")
               //    _fileName = upath.Substring(0, 3) + "-" + _fileName; // avoid duplication in cloud storage

               if (context.Request.Headers["MTP"] != null)
                   MediaType = Convert.ToInt32(context.Request.Headers["MTP"]);

               //string extensions = "";
               //if (MediaType == 0)
               //    extensions = Site_Settings.Video_Allowed_Formats;
               //else
               //    extensions = Site_Settings.Audio_Allowed_Formats;

               //bool sts = UtilityBLL.Check_File_Extension(extensions, fileName.ToLower());
               //if (sts == false)
               //{
               //    return "Invalid format, please upload proper video!"; // Invalid video format, please upload proper video
               //}

               int allowable_size_mb = 0;
               if (MediaType == 0)
               {
                   allowable_size_mb = Site_Settings.Video_Max_Size;
               }
               else
               {
                   allowable_size_mb = Site_Settings.Audio_Max_Size;
               }
               int UploadSize = allowable_size_mb * 1000000;
               if (fileUpload.ContentLength > UploadSize)
               {
                   return "Video Limit Exceeds";
               }

               string uploadPath = "";
               // check whether audio / mp3 encoding enabled
               if (this.MediaType == 1)
               {
                   // audio encoding
                   if (fileName.EndsWith(".mp3"))
                   {
                       // upload mp3 directly in mp3 path instead of default path
                       if (upath == "")
                           uploadPath = UrlConfig.MP3_Path(); // source video path
                       else
                           uploadPath = UrlConfig.MP3_Path(upath); // source video path
                   }
                   else
                   {
                       // default path
                       if (upath == "")
                           uploadPath = UrlConfig.Source_Video_Path(); // source video path
                       else
                           uploadPath = UrlConfig.Source_Video_Path(upath); // source video path
                   }
               }
               else
               {//azure
                   // default path
                   if (upath == "")
                       uploadPath = UrlConfig.Source_Video_Path(); // source video path
                   else
                       uploadPath = UrlConfig.Source_Video_Path(upath); // source video path
               }

               FileStream fs;
               using (fs = new FileStream(Path.Combine(uploadPath, fileName), chunk == 0 ? FileMode.Create : FileMode.Append))
               {
                   byte[] buffer = new byte[fileUpload.InputStream.Length];
                   fileUpload.InputStream.Read(buffer, 0, buffer.Length);

                   fs.Write(buffer, 0, buffer.Length);
               }
               return fileName; // "Success";
           }
           else
           {
               return "failed";
           }

           return "";
       }
       public bool IsReusable {
           get {
               return false;
           }
       }

    code in encode.aspx responsible for encoding the video :

    private string EncodeMedia(HttpContext context)
    {
       string sourcepath = "";
       string publishedpath = "";
       string mp3path = "";
       string thumbpath = "";
       if (this.UserName != "")
       {//azure
           sourcepath = UrlConfig.Source_Video_Path(this.UserName);
           publishedpath = UrlConfig.Published_Video_Path(this.UserName);
           mp3path = UrlConfig.MP3_Path(this.UserName);
           thumbpath = UrlConfig.Thumbs_Path(this.UserName);
       }
       else
       {
           sourcepath = UrlConfig.Source_Video_Path();
           publishedpath = UrlConfig.Published_Video_Path();
           mp3path = UrlConfig.MP3_Path();
           thumbpath = UrlConfig.Thumbs_Path();
       }
       if (this.FileName.EndsWith(".mp3") &amp;&amp; this.MediaType == 1)
       {
           // mp3 and audio format
           if (!File.Exists(mp3path + "/" + this.FileName))
           {
               return "Audio file not found!";
           }
       }
       else
       {
           // rest normal video and audio encoding
           if (!File.Exists(sourcepath + "/" + this.FileName))
           {
               return "Source file not found!";
           }
       }

       if (CloudSettings.EnableCloudStorage &amp;&amp; this.UserName != "")
           this.FileName = this.UserName.Substring(0, 3) + "-" + this.FileName; // avoid duplication in cloud storage


       //double f_contentlength = 0;
       //if (Site_Settings.Feature_Packages == 1)
       //{
       //    if (Config.GetMembershipAccountUpgradeType() != 1)
       //    {
       //        // Check whether user have enough space to upload content
       //        // Restriction only for normal or premium users
       //        f_contentlength = (double)fileUpload.ContentLength / 1000000;
       //        string media_field_name = "space_video";
       //        if (MediaType == 1)
       //            media_field_name = "space_audio";
       //        if (!User_PackagesBLL.Check_User_Space_Status(upath, media_field_name, f_contentlength) &amp;&amp; !isAdmin)
       //        {
       //            // insufficient credits to upload content
       //            return "Insufficient credits to upload media file"; //   Response.Redirect(Config.GetUrl("myaccount/packages.aspx?status=" + media_field_name), true);
       //        }
       //    }
       //}

       this.backgroundpublishing = true; // should be true on direct encoding
       // Video Processing
       string flv_filename = "";
       string original_filename = "";
       string thumb_filename = "";
       string duration = "";
       int duration_sec = 0;

       // set video actions : 1 -> on, 0 -> off
       int isenabled = 1;
       int ispublished = 1;
       int isreviewed = 1;
       int isresponse = 0;
       if (Response_VideoID > 0)
           isresponse = 1;

       string flv_url = "none";
       string thumb_url = "none";
       string org_url = "none";
       string _embed = "";

       string errorcode = "0";
       VideoInfo info = null;

       if (Site_Settings.Content_Approval == 0)
           isreviewed = 0;


       // check whether audio / mp3 encoding enabled
       if (this.FileName.EndsWith(".mp3") &amp;&amp; this.MediaType==1)
       {
           // audio encoding
           // mp3 file already
           // so no encoding happens
           MediaHandler _minfo = new MediaHandler();
           _minfo.FFMPEGPath = Encoding_Settings.FFMPEGPATH;
           _minfo.FileName = FileName;
           _minfo.InputPath = mp3path;
           info = _minfo.Get_Info();

           flv_filename = FileName;
           original_filename = FileName;
           duration = info.Duration;
           duration_sec = info.Duration_Sec;
           isenabled = 1; // enabled
       }
       else if (this.directpublishing)
       {            

           // publish video
           ArrayList itags = new ArrayList();
           MHPEncoder encoder = new MHPEncoder();
           //if (this.FileName.EndsWith(".mpeg") || this.FileName.EndsWith(".mpg")) // use mpg compatible ffmpeg encoder
           //    encoder.FfmpegPath = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath) + "\\ffmpeg\\ffmpegbk\\ffmpeg.exe";
               //encoder.ThumbFfmpegPath = Encoding_Settings.FFMPEGPATH; // use normal ffmpeg encoder for thumbs processing

           //azure
           encoder.FfmpegPath = Encoding_Settings.FFMPEGPATH; // use normal ffmpeg encoder
           encoder.FlvToolPath = Encoding_Settings.FLVTOOLPATH; // set meta information for flv videos
           encoder.Mp4BoxPath = Encoding_Settings.MP4BoxPath; // set meta information for mp4 videos
           encoder.SourcePath = sourcepath;
           encoder.SourceFileName = this.FileName;

           // No cloud storage on direct encoding
           //if (CloudSettings.EnableCloudStorage)
           //    encoder.EnableCloudStorage = true;


           if (MediaType == 1)
           {
               // audio encoding
               itags.Add("14");
               encoder.iTags = itags;
               encoder.GrabThumbs = false;
               encoder.PublishedPath = mp3path;

               //_vprocess.OutputPath = this.MP3Path;
               //_vprocess.isAudio = true;
           }
           else
           {
               // video encoding
               itags.Add(EncoderSettings.DefaultITagValue.ToString()); // 5 for 360p mp4 encoding    
               //itags.Add(7);   // this will call 7 case settings to publish next video ending with _7.mp4 instead of _5.mp4
               // so there will be 2 videos with different resoultions published at the end of the process?
               // yesmake sure use proper settings first test it directly via command.    
               //okay i got it. But i'm gonna have to use a different media players to incroporate those settings
               // once published you can load different videos for different user by checking _7.mp4 (end) va
              //okay got it.

               //azure
               encoder.PublishedPath = publishedpath;
               encoder.iTags = itags;
               encoder.ThumbsDirectory = thumbpath;
               encoder.TotalThumbs = 15;

               //_vprocess.ThumbPath = this.ThumbPath;
               //_vprocess.OutputPath = this.FLVPath;
               //if (Config.isPostWaterMark())
               //{
               //    // script for posting watermark on video
               //    _vprocess.WaterMarkPath = Server.MapPath(Request.ApplicationPath) + "\\contents\\watermark";
               //    _vprocess.WaterMarkImage = "watermark.gif";

               //}
           }
           int deleteoption = Site_Settings.Video_Delete_Original;
           if (deleteoption == 1)
           {
               encoder.DeleteSource = true;
           }
           // background processing
           if (this.backgroundpublishing &amp;&amp; this.MediaType==0)
           {
               encoder.BackgroundProcessing = true;
               // get information from source video in order to store it in database
               MediaHandler _minfo = new MediaHandler();
               //if (this.FileName.EndsWith(".mpeg") || this.FileName.EndsWith(".mpg")) // use mpg compatible ffmpeg encoder
               //    encoder.FfmpegPath = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath) + "\\ffmpeg\\ffmpegbk\\ffmpeg.exe";
               //else
                   _minfo.FFMPEGPath = Encoding_Settings.FFMPEGPATH;

               _minfo.FileName = FileName;
               _minfo.InputPath = sourcepath;
               info = _minfo.Get_Info();
           }
           // encode video processing
           Video_Information vinfo = encoder.Process();
           if (vinfo.ErrorCode > 0)
           {
               errorcode = vinfo.ErrorCode.ToString();
               ErrorLgBLL.Add_Log("Encoding Failed Log", "", "encoding error: " + vinfo.ErrorCode.ToString() + "<br />Description: " + vinfo.ErrorDescription.ToString());
                //return vinfo.ErrorDescription;
           }
           // Double check validation
           // if published video exist
           // if thumb exist
           // then proceed further

           if (MediaType == 0)
           {
               if (!File.Exists(encoder.PublishedPath + "/" + vinfo.FLVVideoName))
               {
                   return "Video failed to published properly.";
               }
               if (!File.Exists(encoder.ThumbsDirectory + "/" + vinfo.ThumbFileName))
               {
                   return "Thumbs failed to grab from video properly.";
               }
           }
           else
           {
               if (vinfo.FLVVideoName == "")
               {
                   vinfo.FLVVideoName = this.FileName.Remove(this.FileName.LastIndexOf(".")) + "_14.mp3"; // mp3 file path name
               }
               if (!File.Exists(encoder.PublishedPath + "/" + vinfo.FLVVideoName))
               {
                   return "Audio failed to published properly.";
               }
           }
           // Now thumbs and video published, procceed for data processing
           // get information from vinfo object
           if (this.backgroundpublishing &amp;&amp; this.MediaType == 0)
           {
               string OutputFileName = this.FileName.Remove(this.FileName.LastIndexOf("."));
               flv_filename = OutputFileName + "_" + EncoderSettings.DefaultITagValue + "." + EncoderSettings.Return_Output_Extension(EncoderSettings.DefaultITagValue);
               original_filename = vinfo.OriginalVideoName;
               thumb_filename = OutputFileName + "_008.jpg"; // info.ThumbFileName;
               duration = info.Duration;
               duration_sec = info.Duration_Sec;
           }
           else
           {
               flv_filename = vinfo.FLVVideoName;
               original_filename = vinfo.OriginalVideoName;
               thumb_filename = vinfo.ThumbFileName;
               duration = vinfo.Duration;
               duration_sec = vinfo.Duration_Sec;
               isenabled = vinfo.isEnabled;
           }

           // No cloud storage on direct encoding.
           // Note cloude storage only works if background processing is disabled
           // Or works in cased of sheduled processing
           if (CloudSettings.EnableCloudStorage &amp;&amp; errorcode == "0")
           {
               flv_url = "amazon";
               org_url = "https://s3.amazonaws.com/" + CloudSettings.OriginalVideoBucketName + "/" + this.FileName;
               thumb_url = "https://s3.amazonaws.com/" + CloudSettings.ThumbsBucketName + "/" + thumb_filename;

           }

       }
       else
       {
           // set publishing status off.
           ispublished = 0;
           original_filename = this.FileName;
       }

       // Store video information in database
       string ipaddress = context.Request.ServerVariables["REMOTE_ADDR"].ToString();

       // Store media information in database
       Video_Struct vd = new Video_Struct();
       vd.CategoryID = 0; // store categoryname or term instead of category id
       vd.Categories = Categories;
       vd.UserName = UserName;
       vd.Title = "";
       vd.Description = "";
       vd.Tags = Tags;
       vd.Duration = duration;
       vd.Duration_Sec = duration_sec;
       vd.OriginalVideoFileName = original_filename;
       vd.VideoFileName = flv_filename;
       vd.ThumbFileName = thumb_filename;
       vd.isPrivate = Privacy;
       vd.AuthKey = PAuth;
       vd.isEnabled = isenabled;
       vd.Response_VideoID = Response_VideoID; // video responses
       vd.isResponse = isresponse;
       vd.isPublished = ispublished;
       vd.isReviewed = isreviewed;
       vd.FLV_Url = flv_url;
       vd.Thumb_Url = thumb_url;
       vd.Org_Url = org_url;
       vd.Embed_Script = _embed;
       vd.isExternal = 0; // website own video, 1: embed video
       vd.IPAddress = ipaddress;
       vd.Type = MediaType;
       vd.YoutubeID = "";
       vd.isTagsreViewed = 1;
       vd.Mode = 0; // filter videos based on website sections
       //vd.ContentLength = f_contentlength;
       vd.GalleryID = GID;
       vd.ErrorCode = Convert.ToInt32(errorcode);
       long videoid = VideoBLL.Process_Info(vd, false);

       // Process tags
       if (Tags != "")
       {
           int tag_type = 0; // represent videos
           if (MediaType == 1)
               tag_type = 4; // represent audio file
           TagsBLL.Process_Tags(Tags, tag_type, 0);
       }

       if (Response_VideoID > 0)
       {
           VideoBLL.Update_Responses(Response_VideoID);
       }

       return "Success";
    }