平台:Unity
问题描述:由于硬件问题,无法获取到Android相机,因此使用自采集方案,获取到相机视频流主动推送,出现两个问题
- 相机返回的是yuv i420格式的数据,测试使用了官方提供的RenderWithYUV的demo场景作为接收端,发现是绿屏,不知道这种情况是否需要自己去做转码工作,下面是发送端接收相机数据处理部分的代码
NativeArray<byte> data = new NativeArray<byte>(imagedata, Allocator.Temp);
if (_shareData?.Length != data.Length)
{
_shareData = new byte[data.Length];
}
ExternalVideoFrame externalVideoFrame = new ExternalVideoFrame();
externalVideoFrame.type = VIDEO_BUFFER_TYPE.VIDEO_BUFFER_RAW_DATA;
externalVideoFrame.format = VIDEO_PIXEL_FORMAT.VIDEO_PIXEL_I420;
externalVideoFrame.buffer = _shareData;
externalVideoFrame.stride = width;
externalVideoFrame.height = height;
externalVideoFrame.cropLeft = 10;
externalVideoFrame.cropTop = 10;
externalVideoFrame.cropRight = 10;
externalVideoFrame.cropBottom = 10;
externalVideoFrame.rotation = 180;
externalVideoFrame.timestamp = System.DateTime.Now.Ticks / 10000;
var ret = RtcEngine.PushVideoFrame(externalVideoFrame, videoTrack);
Debug.Log("PushVideoFrame ret = " + ret + "time: " + System.DateTime.Now.Millisecond)
2.选用自采集推流的方式后,如何能让本地视频渲染去渲染主动推的视频流而不是SDK去获取相机的视频流呢?
刚入手,还不熟悉,如有描述不清的地方敬请提出,我会尽量提供信息
1. 绿屏大概率是集成的问题,可以先参考文档自查: https://docportal.shengwang.cn/cn/All/faq/pixelated_green_video
2. 渲染可以使用setupLocalVideo方法来做,参考 demo:https://github.com/AgoraIO/API-Examples/blob/main/Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/PushExternalVideoYUV.java
3. 可以按照我们的方式去 setExternalVideoSource,SDK就不会主动再去相机里读数据