Android cámara2 api galaxia s7

Estoy escribiendo una aplicación que graba vídeo desde el teléfono y lo sube a un servidor. Funciona bien en cualquier dispositivo excepto Galaxy S7. En la grabación de Galaxy S7 se produce un archivo de vídeo con sólo audio y sin vídeo o un marco de vídeo. Esto es cierto en el archivo temporal creado en el teléfono y no solo el que se subió al servidor. Estoy usando la API de Camera2, y lo he intentado con las cámaras frontal y posterior.

He intentado con mi código, y estas dos aplicaciones de ejemplo: https://developer.android.com/samples/Camera2Video/project.html https://github.com/googlesamples/android-Camera2Video/blob/master/Application/ src / main / java / com / ejemplo / android / camera2video / Camera2VideoFragment.java

El archivo de vídeo producido parece estar bien, aquí está el codec de información: Stream 0 Tipo: Video Codec: H264 – MPEG-4 AVC (parte 10) (avc1) Idioma: Inglés Resolución: 960×720 Resolución de la pantalla: 960×720 Frame rate: 29.055091

Stream 1 Tipo: Codec Audio: MPEG AAC Audio (mp4a) Idioma: Inglés Canales: Estéreo Frecuencia de muestreo: 16000 Hz

Después de varios días de trabajo encontré la respuesta.

El Samsung Galaxy S7 (y S6 creo) tiene un error que desordena la codificación. La corrección consiste en reencodar utilizando la función siguiente.

Tenga en cuenta que necesita esta dependencia en su gradle: compile 'com.googlecode.mp4parser: isoparser: 1.1.22'

public void fixSamsungBug() { DataSource channel = null; try { channel = new FileDataSourceImpl(app.dataMgr.videoFileURL); } catch (FileNotFoundException e) { e.printStackTrace(); } IsoFile isoFile = null; try { isoFile = new IsoFile(channel); } catch (IOException e) { e.printStackTrace(); } List<TrackBox> trackBoxes = isoFile.getMovieBox().getBoxes(TrackBox.class); boolean sampleError = false; for (TrackBox trackBox : trackBoxes) { TimeToSampleBox.Entry firstEntry = trackBox.getMediaBox().getMediaInformationBox().getSampleTableBox().getTimeToSampleBox().getEntries().get(0); // Detect if first sample is a problem and fix it in isoFile // This is a hack. The audio deltas are 1024 for my files, and video deltas about 3000 // 10000 seems sufficient since for 30 fps the normal delta is about 3000 if(firstEntry.getDelta() > 10000) { sampleError = true; firstEntry.setDelta(3000); } } if(sampleError) { Log.d("gpinterviewandroid", "Sample error! correcting..."); Movie movie = new Movie(); for (TrackBox trackBox : trackBoxes) { movie.addTrack(new Mp4TrackImpl(channel.toString() + "[" + trackBox.getTrackHeaderBox().getTrackId() + "]" , trackBox)); } movie.setMatrix(isoFile.getMovieBox().getMovieHeaderBox().getMatrix()); Container out = new DefaultMp4Builder().build(movie); //delete file first! File file = new File(app.dataMgr.videoFileURL); boolean deleted = file.delete(); FileChannel fc = null; try { //fc = new FileOutputStream(new File(app.dataMgr.videoFileURL)).getChannel(); fc = new RandomAccessFile(app.dataMgr.videoFileURL, "rw").getChannel(); } catch (FileNotFoundException e) { e.printStackTrace(); } try { out.writeContainer(fc); fc.close(); } catch (IOException e) { e.printStackTrace(); } Log.d("gpinterviewandroid", "Finished correcting raw video"); } } 
  • Detectar la orientación de un vídeo grabado en android
  • Obtención de pantalla en negro cuando se agrega ExoPlayer a GLSurfaceView
  • WebView no reproducirá vídeo flash incorporado
  • Android MediaPlayer parpadea al reproducir vídeos en Android 4.2.2
  • Android: Reproducción de video de MediaPlayer sin golpes o sin problemas
  • Android: Reproducción y grabación simultánea de vídeo
  • ¿Se admiten los subtítulos en cualquiera de los controles de vídeo nativos?
  • Cómo obtener HTML5 video URI en HTML5VFullScreen $ SurfaceVideoView en Android 4.0?
  • Transmisión de audio y vídeo desde Android a PC / web.
  • Android: ¿Cómo configurar la última versión de FFMPEG en android studio?
  • Exo player DASH Ejemplo de streaming
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.