Перегрев стекла на видеопотоке

Я занимаюсь разработкой приложения Google Glass, которое выполняет потоковое видео с помощью WebRTC. Проблема в том, что стекло перегревается через 20 секунд, а затем выключается. Это общая проблема? Можно ли как-то увеличить время записи и замедлить перегрев?

1 ответ

Ваш стакан перегревается, потому что расход батареи во время потокового видео находится на более высоком уровне. Вы можете использовать стороннюю библиотеку libstream, которая имеет много оптимизированного кода для потребления батареи и работает со стеклом. Для WebRTC эта библиотека работает лучше всего. Я также предоставляю некоторый общий код для реализации приложения с библиотекой. Пожалуйста, посмотрите, и это будет иметь значение.

 public class MainActivity extends Activity implements SurfaceHolder.Callback, Session.Callback {

private int mRtspPort = -1;

private ServiceConnection mRtspServerConnection = new ServiceConnection() {

    private static final int RTSP_PORT = 1234;

    @Override
    public void onServiceConnected(ComponentName className, IBinder binder) {
        RtspServer s = ((RtspServer.LocalBinder) binder).getService();
        s.setPort(RTSP_PORT);
        mRtspPort = s.getPort();
    }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    setContentView(R.layout.activity_main);

    // Configures the SessionBuilder
    SessionBuilder.getInstance()
            .setSurfaceView((SurfaceView) findViewById(R.id.surface))
            .setCallback(this)
            .setPreviewOrientation(90)
            .setContext(getApplicationContext())
        .setAudioEncoder(SessionBuilder.AUDIO_NONE)
        .setVideoEncoder(SessionBuilder.VIDEO_H264)
        .setVideoQuality(new VideoQuality(320, 240, 20, 500000));

// Starts the RTSP server
bindService(new Intent(this, RtspServer.class), mRtspServerConnection, Context.BIND_AUTO_CREATE);
}

@Override
public void onResume() {
super.onResume();
mResumed = true;
displayConnectString();
SessionBuilder.getInstance().getSurfaceView().setAspectRatioMode(SurfaceView.ASPECT_RATIO_PREVIEW);
SessionBuilder.getInstance().getSurfaceView().getHolder().addCallback(this);
}

private void displayConnectString() {
WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
int ip = wifiInfo.getIpAddress();
String ipAddress = Formatter.formatIpAddress(ip);
((TextView) findViewById(R.id.connectInfo)).setText("rtsp://" + ipAddress + ":" + mRtspPort);
}

@Override
public void onDestroy() {
super.onDestroy();
unbindService(mRtspServerConnection);
}

@Override
 public void onSessionStarted() {
((TextView) findViewById(R.id.connectInfo)).setText("");
}

@Override
public void onSessionStopped() {
    displayConnectString();
}
}

Надеюсь, это поможет!

Другие вопросы по тегам