Как плавно отображать видео?

Я пишу программу, которая будет получать видеопоток с IP-камеры и отображать ее видео.

Я запрашиваю поток MJPEG, анализирую данные и отображаю кадр за кадром на элементе управления WPF для создания видео.

Я сравнил свою программу с другими программами и увидел, что моя программа отображает видео менее плавно, чем другие, хотя ОТОБРАЖЕНИЕ ЧАСТОТЫ КАДРОВ такое же.

Я отображал видео на элементе управления WPF, последовательно обновляя изображение элемента управления.

Кто-нибудь может сказать мне, почему моя программа не работает гладко? и как его улучшить.

ОБНОВИТЬ:

@LearnedfromMistake: есть 2 темы. Поток № 1 будет запрашивать, анализировать данные из потока камеры и добавлять кадры в очередь. Поток № 2 получит кадр из очереди и отобразит его.

Вот мой псевдокод.

Thread #1    
{    
   while(true)    
   {    
      JpegFrame = ReadAFrameFromStream();    
      QUEUE.Append(JpegFrame);
   }    
}

Thread #2    
{    
   while(true)    
   {    
      JpegFrame = QUEUE.GetFrame();    
      WPFControl.UpdateImage(JpegFrame); //Making video here
   }    
}

person TTGroup    schedule 26.01.2013    source источник
comment
Не могли бы вы показать свой код?   -  person Rahul Tripathi    schedule 26.01.2013


Ответы (1)


  • в то время как видеокадры предположительно снимаются через равные промежутки времени, они могут быть закодированы с различными задержками, применяются задержки / задержки передачи и буферизации, и, в конечном итоге, ваша скорость приема не является регулярной, вам необходимо компенсировать это, чтобы восстановить плавную подачу
  • Накладные расходы на перерисовку элементов управления WPF больше по сравнению с представлением через специализированные мультимедийные API.

Лучше всего было бы упростить API потоковой передачи мультимедиа, где изображения декодируются в кадры YUV и представляются точно в соответствии с прикрепленными метками времени.

person Roman R.    schedule 26.01.2013