Я не уверен, что это Xamarin специфическая или родная проблема.ios h264 рендеринг видео отлично работает, перезапущен 15 раз больше не видно видео
Я создаю свой ViewRenderer и в OnElementChanged мой UIImageView.
base.OnElementChanged(e);
Foundation.NSError error;
var session = AVFoundation.AVAudioSession.SharedInstance();
session.SetCategory(AVFoundation.AVAudioSession.CategoryPlayAndRecord, out error);
if (error != null)
{
ClientLogger.Instance.Log("Error im MediaViewRenderer creating AV session, error code: " + error.Code, ClientLogger.LogLevel.Error);
}
//_control = e.NewElement as CustomMediaView;
UIKit.UIImageView surface = new UIKit.UIImageView();
if (surface != null)
{
this.SetNativeControl(surface);
Я создаю мой videolayer, если он является недействительным и множество связанных и Frames каждый раз, когда я сделать:
if (_surface != null)
{
if (_videoLayer == null && IsRunning)
{
_videoLayer = new AVSampleBufferDisplayLayer();
_videoLayer.VideoGravity = AVLayerVideoGravity.ResizeAspect.ToString();
_timeBase = new CMTimebase(CMClock.HostTimeClock);
_videoLayer.ControlTimebase = _timeBase;
_videoLayer.ControlTimebase.Time = CMTime.Zero;
_videoLayer.ControlTimebase.Rate = 1.0;
_surface.Layer.AddSublayer(_videoLayer);
}
if (_videoLayer != null)
{
//if (_videoLayer.VisibleRect == null || _videoLayer.VisibleRect.Height == 0 || _videoLayer.VisibleRect.Width == 0)
// ClientLogger.Instance.Log("Error iOS H264Decoder rect", ClientLogger.LogLevel.Error);
_videoLayer.Frame = _surface.Frame;
_videoLayer.Bounds = _surface.Bounds;
}
я получу свой поток RTP и декодировать и отображать мое видео, как она descriped здесь:
How to use VideoToolbox to decompress H.264 video stream
Если я хочу, чтобы остановить видео, я поставил videolayer в нуль, позже surafce тоже.
_videoLayer.Flush();
_videoLayer.Dispose();
_videoLayer = null;
_surface.Dispose();
_surface = null;
Это отлично работает и дает мне приятное видео H264 около 15 раз.
И после этого он показывает пустой фон. Видео не видно. Декодер отлично работает и, кажется, визуализирует, поверхность и видеослои не являются нулевыми.
Кажется, что нет отверстия для памяти или, по крайней мере, не такого размера, что это может быть проблемой.
Бывает на обоих iOS 9 и 10. Я думаю, что что-то не так с видеослоем?
Любая идея, почему она работает только 15 раз?
Большое спасибо за помощь или идеи!
Это действительно интересно. Можете ли вы рассказать нам больше о видео, которое вы играете? – Feign