stream pushing ok without access permission of /dev/video0
[rtmpclient.git] / app / src / main / java / ai / suanzi / rtmpclient / MyService.java
1 package ai.suanzi.rtmpclient;
2
3 import android.app.Service;
4 import android.content.Intent;
5 import android.os.Handler;
6 import android.os.HandlerThread;
7 import android.os.IBinder;
8 import android.os.Looper;
9 import android.util.Log;
10 import android.widget.Toast;
11 import android.support.v4.app.NotificationCompat;
12 import android.graphics.BitmapFactory;
13 import android.app.Notification;
14 import android.os.Message;
15 import org.apache.log4j.Level;
16 import org.apache.log4j.Logger;
17
18 public class MyService extends Service {
19
20     private Logger gLogger = Logger.getLogger("MyService");
21
22     private Ffmpeg ffmpeg = Ffmpeg.getInstance();
23     private  Boolean isRunning = false;
24     private FfmpegRunnable  runnable;
25
26     private class FfmpegRunnable implements Runnable {
27         private String url;
28         public FfmpegRunnable(String _url){
29             this.url = _url;
30         }
31         @Override
32         public void run(){
33             gLogger.error("Run Ffmpeg url: " + url);
34             isRunning = true;
35             ffmpeg.push(null, this.url);
36         }
37     }
38
39     private static final int NOTIFICATION_DOWNLOAD_PROGRESS_ID = 0x0001;                                        //id不可设置为0,否则不能设置为前台service
40     public void createNotification(){
41         gLogger.error("createNotification");
42         NotificationCompat.Builder builder=new NotificationCompat.Builder(this);                        //使用兼容版本
43         builder.setSmallIcon(R.mipmap.ic_launcher);                                                             //设置状态栏的通知图标
44         builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_background));   //设置通知栏横条的图标
45         builder.setAutoCancel(false);                                                                           //禁止用户点击删除按钮删除
46         builder.setOngoing(true);                                                                               //禁止滑动删除
47         builder.setShowWhen(true);                                                                              //右上角的时间显示
48         builder.setContentTitle("Rtmp Foreground Service!!!");                                                  //设置通知栏的标题内容
49         Notification notification = builder.build();                                                            //创建通知
50         startForeground(NOTIFICATION_DOWNLOAD_PROGRESS_ID,notification);                                        //设置为前台服务
51     }
52
53     @Override
54     public IBinder onBind(Intent intent) {
55         return null;
56     }
57
58     @Override
59     public void onCreate() {
60         super.onCreate();
61         gLogger.error("onCreate");
62     }
63
64     @Override
65     public void onDestroy() {
66         stopForeground(true);
67         Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show();
68         gLogger.error( "onDestroy");
69         super.onDestroy();
70
71     }
72
73     @Override
74     public void onStart(Intent intent, int startid){
75         super.onStart(intent, startid);
76         gLogger.error("onStart");
77
78     }
79
80     @Override
81     public int onStartCommand(Intent intent, int flags, int startId) {
82         String url = intent.getExtras().getString("url");
83         gLogger.error("onStartCommand: url is:" + url + ". isRunning: " + isRunning);
84         runnable = new FfmpegRunnable(url);
85         if (!isRunning) {
86             createNotification();
87             Toast.makeText(this, "Video stream pushed to " + url, Toast.LENGTH_LONG).show();
88             new Thread(runnable).start();
89         }
90         return START_STICKY;
91     }
92
93     @Override
94     public void onLowMemory(){
95         super.onLowMemory();
96         gLogger.error("onLowMemory");
97     }
98 }