Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

小屏幕推流导致拉流清晰度低 #854

Open
whb-create opened this issue Jul 15, 2022 · 6 comments
Open

小屏幕推流导致拉流清晰度低 #854

whb-create opened this issue Jul 15, 2022 · 6 comments

Comments

@whb-create
Copy link

您好,请问一下,因为获取到的视频帧数据是预览帧,导致小屏幕获取的帧数据比较小,如果要提高清晰度到1080,该怎么处理呢

@begeekmyfriend
Copy link
Owner

预览是从手机摄像头获取的图像,所以关键是摄像头是否支持1080p大小的分辨率,如果不支持那么也就无从处理。

@whb-create
Copy link
Author

预览是从手机摄像头获取的图像,所以关键是摄像头是否支持1080p大小的分辨率,如果不支持那么也就无从处理。

从camera的支持参数可以获取到,录制视频支持的参数最高可以达到1920*1080,但是预览支持的最高参数是和屏幕大小一样的,我现在的设备很小,所以支持的预览参数只有标清的480p。那是不是说明摄像头不支持1080p的数据,或者说我是否应该在获取到480p的回调帧数据之后类似于使用ffmpeg或者neon去进行放大处理才是正确的选择。

@whb-create
Copy link
Author

预览是从手机摄像头获取的图像,所以关键是摄像头是否支持1080p大小的分辨率,如果不支持那么也就无从处理。

从camera的支持参数可以获取到,录制视频支持的参数最高可以达到1920*1080,但是预览支持的最高参数是和屏幕大小一样的,我现在的设备很小,所以支持的预览参数只有标清的480p。那是不是说明摄像头不支持1080p的数据,或者说我是否应该在获取到480p的回调帧数据之后类似于使用ffmpeg或者neon去进行放大处理才是正确的选择。

因为在Android提供的mediarecorder可以设置1920*1080的视频,录制清晰度也高很多,但是当我需要获取帧数据,再使用Android提供的mediacodec硬编码就发现,传递到编码器的数据会直接影响输出数据,但是因为小屏幕的原因,只能输入预览的帧数据,也就是获取到的480p大小的btye数据进行编码。所以我很疑惑,为什么高度封装的mediarecorder录制的视频可以不在意屏幕预览的分辨率去录制视频。

@begeekmyfriend
Copy link
Owner

既然摄像头支持1080p那么推流数据是可以达到该分辨率的,SrsCameraView.java里面调用OpenGL ES,所以获取的数据实际上是在FBO里面,你可以看glReadPixels读取数据的分辨率,这是实际数据大小,SrsCameraView.java会从FBO的软件缓存中去拿数据加入mGLIntBufferCache队列,再用异步线程从mGLIntBufferCache队列里面送往编码器

@whb-create
Copy link
Author

既然摄像头支持1080p那么推流数据是可以达到该分辨率的,SrsCameraView.java里面调用OpenGL ES,所以获取的数据实际上是在FBO里面,你可以看glReadPixels读取数据的分辨率,这是实际数据大小,SrsCameraView.java会从FBO的软件缓存中去拿数据加入mGLIntBufferCache队列,再用异步线程从mGLIntBufferCache队列里面送往编码器

通过glReadPixels获取到的mGLFboBuffer数据大小打印出来其实还是480p的数据长度,直播流程是没有问题的,因为直播数据采集设备是类似于行车记录仪这样的小型设备,直播到网页上显示,网页显示画面清晰度会很低,我目前正在寻找,是否可以将摄像头获取到的yuv数据进行扩充,从而提高分辨率?因为其实从camera回调开始打印数据传递过程中的大小,一直到网页显示,数据都是480p长度的数据,没有变化,那最大的可能就是需要对采集到的数据进行扩充处理了。

@begeekmyfriend
Copy link
Owner

yasea的c++代码里是有libyuv的,不过需要你自己定制。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants