1. 无法获取摄像头数据是怎么回事怎么解决
这是我们在在安装微信时,为了保护手机安全,选择了限制应用软件获取我们手机内的信息,这样就会导致使用时无法获取摄像头数据。有时候手机也会自动默认也会进行禁止摄像头,对于这种情况先打开防护软件,找到“隐私保护”,然后从“隐私保护”中进入到“应用权限管理”。
在权限管理里面修改的话就要点击选择权限管理,并选中里面的按应用管理,在里面找到微信应用,然后点击进入,在这里就可以看到微信的相关权限了,可以看到摄像头的使用权限是拒绝的,这个乱激型时候你只需哗猜要修改一下选中允许就可以了。
2. 如何获取摄像头数据
第一种:
1、在手机桌面,打开应用权限管理打开应用权限管理软件。
2、找到微信点击雹孝雹打开微信后,选择“拍摄照片”选源帆项即可。
第二种:
1、进入手机应用,找到微信,授权摄像头功能就能解决。
第三种:
1、可以将软件卸载后重新慎派安装。
3. 华为9pro视频显示无法获取摄像头数据
1。首先锁手机并打开设置圆燃。
2、其次在app中找到无法获取相机数据的软件。橘孙虚
3、然后点击打开摄像头权限。
4、最后如果还是不能解决,建议删除后重新下载,点击进入看能否获取售凯激后服务。
4. 微信视频显示无法获取摄像头数据怎么回事
微信视频显示无陆备碧法获取摄像头数据怎么回事具体操作步骤如下:1、打开手机“设置”,进入手机设置页面。2、往下滑动点击“微信”进入微信权限页面,再点击“相机”允许微信使用相机功能即可。
1、打开手机“设置”,进入手机设置页面。
2、往下滑动点击“微信”进入微信权限页面,再点击“相机”允许滚巧微信使用相机功能即可。
操作环境
品牌型号:iPhone13
系统版本:ios15.1.1
软件版本:微信Version8.0.16
5. 怎样从监控主机里导出录像数据
从监控主机里导出录像数据的步骤:
工具/原料:电脑,监控主机,pps软件。
1、第一步,我们需要打开电脑上安装物燃的监控客塌空户端PSS软件并登录,进入主界面后,点击右侧设备列表框中显示的区域,右键点击,选择登录。
6. 如何调取监控视频
第一、要确定你想要调取的监控视频是什么类型,是自家监控还是公共服务监控,还是其他。
第二、一般自家监控的话,有两种。一是摄像头上带存储卡,你只需拔掉存储卡,用个读卡器接到电脑就可以看。一种有硬盘录像机的,可以直接去硬盘录像机上翻看。当然如果你的设备时连接了云端的话,可以用监控厂家相关的监控APP去查看云上记录。
第三,对于一些公共服务监控或是天眼监控,那只能去相应管理的监控中心去请求索要
第四,若果第三条行不通,而且视频内容又及其重要,可以请当地警方协调帮忙调取
7. 手机视频聊天显示无法获得摄像头数据,怎么办
手机视频聊天显示无法获得摄像头数据原因是微信没有开启微信摄像头数据,开启微信摄像头数据方法如下:
1,李扰打开手机主页面!点击安全中心
8. 手机上监控视频怎么提取出来
手机上监控视频这样提取出来:首先点开看吵指监控的软件,然后点击需要提取的视频片段,再点击右上角三个点,选颤清择提取就茄碰前可以了,实在不会的话也可以选择录屏,这样也能把视频提取出来
9. 怎么从监控上截取视频
问题一:怎么将监控视频,截图下来 交给你简单的办法:打开要截图的画面,按一下键盘“PrintScreen”键,然后打开电脑的画图程序,按“Ctrl+V”键粘贴,然后另存就可以了!
问题二:怎样裁剪一段监控视频 在监控录像的存储盘里有每段时间的单个视频,你到里面去找,时间和日期都在视频下面标着,要想把视频在电脑上播放的话,就下个视频播放器。
记得采纳啊
问题三:怎么把监控上的视频某段截取下来,并保存在u盘上 这也最好是找一下录像机厂家。一般插上U盘,录像机里面都会有一个备份的选项
问题四:如何截取监控视频图像 用红蜻蜓抓图软件就可以了,相怎么抓都可以,不会黑屏的。 down.gougou/...D4F607
问题五:视频监控保存的录像怎么取出来,怎么办? 监控视频图像保存在硬盘录像机中,硬盘录像机有USB接口,你可以把U盘或移动硬盘插在硬盘录像机的USB接口,在硬盘录像机上查询录像,将你需要时间段的录像下载到你的U盘或移动硬盘就ok了
问题六:如何看出监控视频是否被剪切 1)可以通过专用软件验证水印,很多厂商,如海康的h.264压缩带水印,被修改后能用软件检测出来。水印指压缩时同时与视频早销数据打包的特殊数据。2)看OSD即时间叠加。应不连续。3)一般实时的图像在25fps-30fps,其中的I帧是拥有完整信息的,其它b/州睁族p都需要参照才有意义。
问题七:请问一下监控视频怎么截图?急急急 监控的硬盘录像机有截图的功能,预览监控画面的同时,按“小手一样”的图标,就是册弊抓图。如果你用电脑的视频播放软件看监控录像,可以通过播放软件自带的抓图功能来截图,或者用QQ、抓图软件等抓图。
问题八:如何从监控系统中拷取视频 插U盘在录像机上,在目录菜单找录像查询,输入时间段,点复制到U盘,就OK了
问题九:监控视频怎样剪切 网上有剪切视频的软件
问题十:监控视频能删截片段吗 视频录像资料存贮与硬盘上,硬盘上的内容当然可以删除了,所以,如果想把监控资料删除,很容易做到。
10. Android MediaCodec surface模式下如何读取原始视频数据
Android 用MediaCodec实现视频硬解码
本文向你讲述如何用android标准的API (MediaCodec)实现视频的硬件编解码。例程将从摄像头采集视频开始,然后进行H264编码,再解码,然后显示。我将尽量讲得简短而清晰,不展示那些不相关的代码。但是,我不建议你读这篇文章,也不建议你开发这类应用,而应该转而开发一些戳鱼、打鸟、其乐融融的程序。好吧,下面的内容是写给那些执迷不悟的人的,看完之后也许你会同意我的说法:Android只是一个玩具,很难指望它来做靠谱的应用。
1、从摄像头采集视频
可以通手橡过摄像头Preview的回调并薯陪,来获取视频数据。
首先创建摄像头,并设置参数:
[java] view plain
cam = Camera.open();
cam.setPreviewDisplay(holder);
Camera.Parameters parameters = cam.getParameters();
parameters.setFlashMode("off"); // 无闪光灯
parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
parameters.setPreviewFormat(ImageFormat.YV12);
parameters.setPictureSize(camWidth, camHeight);
parameters.setPreviewSize(camWidth, camHeight);
//这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报错
cam.setParameters(parameters);
宽度和高度必须是摄像头支持的尺寸,否则会报错。要获得所有支持的尺寸,可用getSupportedPreviewSizes,这里不再累述。据说所有的参数必须设全,漏掉一个就可能报错,不过只是据说,我只设了几个属性也没出错。 然绝蠢后就开始Preview了:
[java] view plain
buf = new byte[camWidth * camHeight * 3 / 2];
cam.addCallbackBuffer(buf);
cam.setPreviewCallbackWithBuffer(this);
cam.startPreview();
setPreviewCallbackWithBuffer是很有必要的,不然每次回调系统都重新分配缓冲区,效率会很低。
在onPreviewFrame中就可以获得原始的图片了(当然,this 肯定要 implements PreviewCallback了)。这里我们是把它传给编码器:
[java] view plain
public void onPreviewFrame(byte[] data, Camera camera) {
if (frameListener != null) {
frameListener.onFrame(data, 0, data.length, 0);
}
cam.addCallbackBuffer(buf);
}
2、编码
首先要初始化编码器:
[java] view plain
mediaCodec = MediaCodec.createEncoderByType("Video/AVC");
MediaFormat mediaFormat = MediaFormat.createVideoFormat(type, width, height);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodec.start();
然后就是给他喂数据了,这里的数据是来自摄像头的:
[java] view plain
public void onFrame(byte[] buf, int offset, int length, int flag) {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0)
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(buf, offset, length);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, length, 0, 0);
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo,0);
while (outputBufferIndex >= 0) {
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
if (frameListener != null)
frameListener.onFrame(outputBuffer, 0, length, flag);
mediaCodec.releaseOutputBuffer(outputBufferIndex, false);
outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
}
先把来自摄像头的数据喂给它,然后从它里面取压缩好的数据喂给解码器。
3、解码和显示
首先初始化解码器:
[java] view plain
mediaCodec = MediaCodec.createDecoderByType("Video/AVC");
MediaFormat mediaFormat = MediaFormat.createVideoFormat(mime, width, height);
mediaCodec.configure(mediaFormat, surface, null, 0);
mediaCodec.start();
这里通过给解码器一个surface,解码器就能直接显示画面。
然后就是处理数据了:
[java] view plain
public void onFrame(byte[] buf, int offset, int length, int flag) {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(buf, offset, length);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, length, mCount * 1000000 / FRAME_RATE, 0);
mCount++;
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo,0);
while (outputBufferIndex >= 0) {
mediaCodec.releaseOutputBuffer(outputBufferIndex, true);
outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
}
}
queueInputBuffer第三个参数是时间戳,其实怎么写都无所谓,只要是按时间线性增加的就可以,这里就随便弄一个了。后面一段的代码就是把缓冲区给释放掉,因为我们直接让解码器显示,就不需要解码出来的数据了,但是必须要这么释放一下,否则解码器始终给你留着,内存就该不够用了。
好了,到现在,基本上就可以了。如果你运气够好,现在就能看到视频了,比如在我的三星手机上这样就可以了。但是,我试过几个其他平台,多数都不可以,总是有各种各样的问题,如果要开发一个不依赖平台的应用,还有很多的问题要解决。说说我遇到的一些情况:
1、视频尺寸
一般都能支持176X144/352X288这种尺寸,但是大一些的,640X480就有很多机子不行了,至于为什么,我也不知道。当然,这个尺寸必须和摄像头预览的尺寸一致,预览的尺寸可以枚举一下。
2、颜色空间
根据ANdroid SDK文档,确保所有硬件平台都支持的颜色,在摄像头预览输出是YUV12,在编码器输入是COLOR_FormatYUV420Planar,也就是前面代码中设置的那样。 不过,文档终究是文档,否则安卓就不是安卓。
在有的平台上,这两个颜色格式是一样的,摄像头的输出可以直接作为编码器的输入。也有的平台,两个是不一样的,前者就是YUV12,后者等于I420,需要把前者的UV分量颠倒一下。下面的代码效率不高,可供参考。
[java] view plain
byte[] i420bytes = null;
private byte[] swapYV12toI420(byte[] yv12bytes, int width, int height) {
if (i420bytes == null)
i420bytes = new byte[yv12bytes.length];
for (int i = 0; i < width*height; i++)
i420bytes[i] = yv12bytes[i];
for (int i = width*height; i < width*height + (width/2*height/2); i++)
i420bytes[i] = yv12bytes[i + (width/2*height/2)];
for (int i = width*height + (width/2*height/2); i < width*height + 2*(width/2*height/2); i++)
i420bytes[i] = yv12bytes[i - (width/2*height/2)];
return i420bytes;
}
这里的困难是,我不知道怎样去判断是否需要这个转换。据说,Android 4.3不用再从摄像头的PreView里面取图像,避开了这个问题。这里有个例子,虽然我没读,但看起来挺厉害的样子,应该不会有错吧(觉厉应然)。http://bigflake.com/mediacodec/CameraToMpegTest.java.txt
3、输入输出缓冲区的格式
SDK里并没有规定格式,但是,这种情况H264的格式基本上就是附录B。但是,也有比较有特色的,它就是不带那个StartCode,就是那个0x000001,搞得把他编码器编出来的东西送给他的解码器,他自己都解不出来。还好,我们可以自己加。
[java] view plain
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
byte[] outData = new byte[bufferInfo.size + 3];
outputBuffer.get(outData, 3, bufferInfo.size);
if (frameListener != null) {
if ((outData[3]==0 && outData[4]==0 && outData[5]==1)
|| (outData[3]==0 && outData[4]==0 && outData[5]==0 && outData[6]==1))
{
frameListener.onFrame(outData, 3, outData.length-3, bufferInfo.flags);
}
else
{
outData[0] = 0;
outData[1] = 0;
outData[2] = 1;
frameListener.onFrame(outData, 0, outData.length, bufferInfo.flags);
}
}
4、有时候会死在dequeueInputBuffer(-1)上面
根据SDK文档,dequeueInputBuffer 的参数表示等待的时间(毫秒),-1表示一直等,0表示不等。按常理传-1就行,但实际上在很多机子上会挂掉,没办法,还是传0吧,丢帧总比挂掉好。当然也可以传一个具体的毫秒数,不过没什么大意思吧。