关于我可以从MediaRecorder写入我的android/linux管道吗?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于AndroidCamera2ImageReader不适用于三
关于我可以从 MediaRecorder 写入我的 android/linux 管道吗?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android Camera2 ImageReader 不适用于三星 S21 系列上的 MediaRecorder、Android MediaRecorder API会继续裁剪视频比特率、Android MediaRecorder 不是每次都初始化、Android MediaRecorder 创建 16 位 PCM 编码的音频文件等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 我可以从 MediaRecorder 写入我的 android/linux 管道吗?
- Android Camera2 ImageReader 不适用于三星 S21 系列上的 MediaRecorder
- Android MediaRecorder API会继续裁剪视频比特率
- Android MediaRecorder 不是每次都初始化
- Android MediaRecorder 创建 16 位 PCM 编码的音频文件
我可以从 MediaRecorder 写入我的 android/linux 管道吗?
如何解决我可以从 MediaRecorder 写入我的 android/linux 管道吗?
我正在使用命令创建 android 管道
System.Diagnostics.Process.Start("mkfifo",$"/data/user/0/ru.petrovip.proxyclient/files/videopipe").WaitForExit();
此命令通过应用程序生成管道 videopipe
。
并在应用程序中打开这个管道
var VideoStream = System.IO.File.Open("/data/user/0/ru.petrovip.proxyclient/files/videopipe",FileMode.Open);
管道正在工作,但如果我开始使用 MediaRecorder
作为我的管道,我会在 java.lang.IllegalStateException
处捕获错误 MRecorder.Prepare();
MediaRecorder MRecorder = new MediaRecorder();
MRecorder.SetAudioSource(AudioSource.Mic);
MRecorder.SetVideoSource(VideoSource.Surface);
MRecorder.SetoutputFormat(OutputFormat.ThreeGpp);
MRecorder.SetoutputFile(ParcelFileDescriptor.FromFd((int)VideoStream.Handle).FileDescriptor);
MRecorder.SetVideoSize(displayMetrics.WidthPixels,displayMetrics.HeightPixels);
MRecorder.SetAudioEncoder(AudioEncoder.AmrNb);
MRecorder.SetVideoEncoder(VideoEncoder.H264);
MRecorder.SetVideoEncodingBitRate(512 * 1000);
MRecorder.SetVideoFrameRate(30);
MRecorder.Prepare();
异常
01-18 20:23:55.471 E/MediaRecorder( 5990): prepare Failed: -38
01-18 20:23:55.467 W/vip.proxyclient( 5990): type=1400 audit(0.0:876): avc: denied { read write } for path="/data/data/ru.petrovip.proxyclient/files/videopipe" dev="mmcblk0p24" ino=5435 scontext=u:r:mediaserver:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=fifo_file permissive=0
01-18 20:24:01.625 W/System.err( 5990): java.lang.IllegalStateException
01-18 20:24:01.627 W/System.err( 5990): at android.media.MediaRecorder._prepare(Native Method)
01-18 20:24:01.628 W/System.err( 5990): at android.media.MediaRecorder.prepare(MediaRecorder.java:988)
01-18 20:24:01.629 W/System.err( 5990): at crc64c1965aae109aaff4.MainActivity.n_onCreate(Native Method)
01-18 20:24:01.629 W/System.err( 5990): at crc64c1965aae109aaff4.MainActivity.onCreate(MainActivity.java:31)
01-18 20:24:01.630 W/System.err( 5990): at android.app.Activity.performCreate(Activity.java:7023)
01-18 20:24:01.631 W/System.err( 5990): at android.app.Activity.performCreate(Activity.java:7014)
01-18 20:24:01.632 W/System.err( 5990): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
01-18 20:24:01.633 W/System.err( 5990): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2758)
01-18 20:24:01.637 W/System.err( 5990): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2883)
01-18 20:24:01.638 W/System.err( 5990): at android.app.ActivityThread.-wrap11(UnkNown Source:0)
01-18 20:24:01.639 W/System.err( 5990): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1613)
01-18 20:24:01.640 W/System.err( 5990): at android.os.Handler.dispatchMessage(Handler.java:106)
01-18 20:24:01.640 W/System.err( 5990): at android.os.Looper.loop(Looper.java:164)
01-18 20:24:01.641 W/System.err( 5990): at android.app.ActivityThread.main(ActivityThread.java:6523)
01-18 20:24:01.642 W/System.err( 5990): at java.lang.reflect.Method.invoke(Native Method)
01-18 20:24:01.643 W/System.err( 5990): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
01-18 20:24:01.649 W/System.err( 5990): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)
对于其他系统管道的 /dev/null
,/dev/zero
这将正常工作,没有任何错误。
这是由于安全限制吗?还有其他方法可以解决这个问题吗?
解决方法
通过启用 SELinux
状态启用时会出现此问题。 你需要通过命令禁用他
setenforce 0
注意:此方法仅在您的设备已植根时有效。
Android Camera2 ImageReader 不适用于三星 S21 系列上的 MediaRecorder
如何解决Android Camera2 ImageReader 不适用于三星 S21 系列上的 MediaRecorder
对于新的三星 S21 设备,图像分析无法与视频录制一起使用。
如果我要为捕获会话添加表面:
//surface of TextureView for preview
addTarget(previewSurface)
//surface of media recorder for video recording
addTarget(mediaRecorder.surface)
//surface of image reader for frame analysis
addTarget(imageReader.surface)
imageReader 在哪里
ImageReader.newInstance(previewWidth,previewHeight,ImageFormat.YUV_420_888,1)
预览未启动且日志中的系统输出为:
Camera3-Status: addComponent: Adding new component 3 - streamId = 1,format = 35,width = 1280,height = 720
Camera3-OutputStream: configureConsumerQueueLocked: Consumer wants 1 buffers,HAL wants 0
Camera3-OutputStream: configureConsumerQueueLocked: Camera HAL requested max_buffer count: 0,requires at least 1
Camera3-Stream: finishConfiguration: Unable to configure stream 1 queue: Function not implemented (-38)
Camera3-Device: Camera 0: configureStreamsLocked: Can''t finish configuring output stream 1: Function not implemented (-38)
CameraDeviceClient: endConfigure: Camera 0: Unsupported set of inputs/outputs provided
CameraDevice-JV-0: Stream configuration Failed due to: endConfigure:593: Camera 0: Unsupported set of inputs/outputs provided
CameraCaptureSession: Session 0: Failed to create capture session; configuration Failed
值得注意的是,带有 ImageFormat.JPEG 的图像阅读器工作正常。
三星有没有人帮我解决问题?
Android MediaRecorder API会继续裁剪视频比特率
我正在使用MediaRecorder API将视频录制到文件中.
当我使用高质量的setProfile时,我获得了良好的质量,但是当我尝试手动设置参数时(如下面的代码中),质量很差(因为某种原因,比特率被裁剪).
我想用1fps获得720p.
我一直收到以下警告:
WARN / AuthorDriver(268):视频编码比特率设置为480000 bps
我正在运行的代码:
m_MediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); m_MediaRecorder.setoutputFormat(MediaRecorder.OutputFormat.MPEG_4); m_MediaRecorder.setVideoSize(1280,720); m_MediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); m_MediaRecorder.setVideoFrameRate(1); m_MediaRecorder.setVideoEncodingBitRate(8000000);
任何的想法?
非常感谢.
解决方法
在设置压缩类型之前设置比特率以某种方式解决了问题.
唯一的问题是它是谷歌代码中的错误还是其他我不理解的错误.
原版的:
m_MediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); m_MediaRecorder.setVideoFrameRate(1); m_MediaRecorder.setVideoEncodingBitRate(8000000);
解:
m_MediaRecorder.setVideoEncodingBitRate(8000000); m_MediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); m_MediaRecorder.setVideoFrameRate(1);
Android MediaRecorder 不是每次都初始化
如何解决Android MediaRecorder 不是每次都初始化
我正在尝试使用 Android Media Recorder 记录持久 Surface,我的代码有时可以正常工作,但大多数情况下,在调用媒体记录器类的 .prepare() 方法后,我得到了 Io 异常.. 我尝试更改视频编解码器、帧速率和许多其他内容,但我找不到它的解决方案.. 我花了 2 天的时间来解决这个问题,并且仍在寻找 .. 如果有人遇到同样的问题,请回复 .. 任何形式的帮助都是非常可观的
这是用于初始化记录器的代码
public void initRecorder(File savetoFile,int displayWidth,int displayHeight,int desiredWidth,int desiredHeight,int orientationHint,MediaRecorder.OnErrorListener errorListener,MediaRecorder.OnInfoListener infoListener)
throws IOException {
if(mMediaRecorder==null)
{
MediaRecorder mediaRecorder = new MediaRecorder();
mediaRecorder.setonInfoListener(infoListener);
mediaRecorder.setonErrorListener(errorListener);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
if(mSurface==null)
{
Log.d("Surface_test>>","Surface Is Null");
}else {
Log.d("Surface_test>>","Surface Is NOT >>>>>>>>>>. Null");
mediaRecorder.setInputSurface(mSurface);
}
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setoutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setAudioSamplingRate(44100);
mediaRecorder.setAudioEncodingBitRate(96000);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setVideoEncodingBitRate(12000000);
mediaRecorder.setVideoFrameRate(30);
if(desiredWidth > desiredHeight){
float desiredAspect = 1080.0f / 2280.0f;
if(desiredWidth > 2280 || desiredHeight > 1080){
float aspect = (float) desiredHeight / desiredWidth;
if(aspect > desiredAspect){
desiredHeight = 1080;
desiredWidth = (int) Math.floor(desiredHeight / aspect);
} else {
desiredWidth = 2280;
desiredHeight = (int) Math.floor(desiredWidth * aspect);
}
}
} else {
float desiredAspect = 2280.0f / 1080.0f;
if(desiredWidth > 1080 || desiredHeight > 2280){
float aspect = (float) desiredHeight / desiredWidth;
if(aspect > desiredAspect){
desiredHeight = 2280;
desiredWidth = (int) Math.floor(desiredHeight / aspect);
} else {
desiredWidth = 1080;
desiredHeight = (int) Math.floor(desiredWidth * aspect);
}
}
}
mediaRecorder.setVideoSize(mDesiredHeight,mDesiredWidth);
mediaRecorder.setorientationHint(orientationHint);
Log.d("Recording_Debug>>","File Path>>"+savetoFile.getAbsolutePath());
mediaRecorder.setoutputFile(savetoFile.getAbsolutePath());
try {
mediaRecorder.prepare();
}catch (Exception e)
{
Log.d("Recording_Debug>>",e.toString());
}
mMediaRecorder = mediaRecorder;
}else {
Log.d("Recording_Debug","ALreday Initialized");
}
}
尝试一些方法,我发现当我在下面评论时
mediaRecorder.setVideoSize(mDesiredHeight,mDesiredWidth);
我可以录制视频,但其纵横比不正确
我使用硬编码的维度,如
mediaRecorder.setVideoSize(640,480);
这也不起作用
Android MediaRecorder 创建 16 位 PCM 编码的音频文件
如何解决Android MediaRecorder 创建 16 位 PCM 编码的音频文件
我需要在 Android 上以 AudioFormat
支持的 16 位 PCM 编码格式录制和保存用户的音频文件。
但是 examples 在线使用 MediaRecorder
。是否可以用它来录制 16 位 PCM 编码的文件?
关于我可以从 MediaRecorder 写入我的 android/linux 管道吗?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android Camera2 ImageReader 不适用于三星 S21 系列上的 MediaRecorder、Android MediaRecorder API会继续裁剪视频比特率、Android MediaRecorder 不是每次都初始化、Android MediaRecorder 创建 16 位 PCM 编码的音频文件等相关知识的信息别忘了在本站进行查找喔。
本文标签: