ʵʱÁ÷ýÌåʵÏÖ
ʵʱÁ÷ýÌåÊÇָͨ¹ýÍøÂçʵʱ´«ÊäºÍ²¥·ÅÊÓÆµÄÚÈÝ£¬ÎÞÐèÌáǰÏÂÔØÕû¸öÊÓÆµÎļþ¡£ÔÚǶÈëʽװ±¸ÖÐʵÏÖʵʱÁ÷ýÌ壬¿ÉÒÔΪÓû§Ìṩ¸üÎÞаµÄ?ԢĿÌåÑé¡£
ÍøÂçÐÒéÑ¡Ôñ£º³£ÓõÄÍøÂçÐÒé°üÀ¨RTP£¨ÊµÊ±´«ÊäÐÒ飩¡¢RTSP£¨ÊµÊ±´«Êä¿ØÖÆÐÒ飩¡¢HTTPÁ÷ýÌåµÈ¡£Æ¾Ö¤ÏêϸӦÓÃÑ¡ÔñºÏÊʵÄÐÒé¡£
RTSP·þÎñÆ÷£ºÔÚ·þÎñÆ÷¶Ë£¬¿ÉÒԴһ¸öRTSP·þÎñÆ÷£¬Í¨¹ýRTSPÐÒéÌṩÊÓÆµÁ÷¡£¿Í»§¶Ëͨ¹ýÅþÁ¬RTSP·þÎñÆ÷£¬¿ÉÒÔʵʱԢĿÊÓÆµ¡£
RTSP¿Í»§¶Ë£ºÔÚǶÈëʽװ±¸?ÉÏ£¬¿ÉÒÔʹÓÃRTSP¿Í»§¶Ë¿â£¬Èçlibvlc£¬À´ÊµÏÖ¶ÔRTSPÁ÷µÄ²¥·Å¡£libvlcÊÇÒ»¸öǿʢµÄ¶àýÌå¿â£¬Ö§³Ö¶àÖÖÐæÅºÍÃûÌá£
δÀ´Õ¹ÍûÓë½øÒ»²½¿ª·¢
Ëæ×ÅǶÈëʽÊÖÒÕµÄÒ»Ö±Éú³¤£¬Ç¶ÈëʽÊÓÆµ²¥·Å½«»áÓиü¶àµÄÓ¦ÓúÍÉú³¤¡£Î´À´£¬¿ÉÒÔ̽Ë÷ÒÔÏÂÆ«Ïò£º
¸ßÇåÊÓÆµ²¥·Å£ºËæ×Å´¦Öóͷ£Æ÷ÐÔÄܵÄÌáÉý£¬Î´À´Ç¶Èëʽװ±¸½«Äܹ»ÊµÏÖ¸ü¸ßÇåµÄÊÓÆµ²¥·Å£¬Èç4KÊÓÆµ²¥·Å¡£
¶àýÌåÓ¦ÓãºÇ¶ÈëʽÊÓÆµ²¥ËÉÊÖÒÕµÄÉú³¤£¬½«Îª¶àýÌåÓ¦ÓÃÌṩ¸üǿʢµÄÖ§³Ö¡£ÀýÈ磬ÔÚÖÇÄܼҾӡ¢½ÌÓý»úеÈ˵ÈÁìÓò£¬¿ÉÒÔʵÏÖÔ½·¢¸»ºñµÄ¶àýÌ廥¶¯¹¦Ð§¡£
±ßÑØÅÌË㣺ͨ¹ýÍŽá±ßÑØÅÌËãÊÖÒÕ£¬Ç¶Èëʽװ±¸¿ÉÒÔʵÏÖÍâµØÊÓÆµ´¦?ÀíºÍ²¥·Å£¬ïÔÌÍøÂçÒÀÀµ£¬Ìá¸ßÏìÓ¦ËÙÂÊ¡£
¿çƽ̨¿ª·¢£ºÎ´À´£¬¿ÉÒÔ̽Ë÷¿çƽ̨µÄ?ǶÈëʽÊÓÆµ²¥ÆÌ¿ª·¢£¬Ê¹ÓÃͳһµÄ´úÂë¿âÔÚ²î±ðµÄǶÈëʽװ±¸ÉÏʵÏÖÊÓÆµ²¥·Å£¬Ìá¸ß¿ª·¢Ð§ÂʺͼæÈÝÐÔ¡£
ǶÈëʽÊÓÆµ²¥ËÉÊÖÒÕÔÚÖÖÖÖСÐÍ×°±¸ÖеÄÓ¦ÓÃÔ¶¾°ÁÉÀ«£¬Í¨¹ýÒ»Ö±µÄÊÖÒÕ̽Ë÷ºÍÓÅ»¯£¬¿ÉÒÔΪÓû§´øÀ´Ô½·¢¸»ºñºÍ¸ßЧµÄÊÓÆµ²¥·ÅÌåÑ顣ϣÍû±¾ÎÄÄÜΪÄúÔÚǶÈëʽÊÓÆµ²¥·ÅµÄ¿ª·¢ÖÐÌṩÓÐÒæµÄ²Î¿¼ºÍÖ¸µ¼¡£
ÊÓÆµ²¥·ÅÆ÷µÄÑ¡ÔñÓëÉèÖÃ
ÔÚǶÈëʽÊÓÆµ²¥·ÅµÄʵÏÖÀú³ÌÖУ¬Ñ¡ÔñºÏÊʵÄÊÓÆµ²¥·ÅÆ÷ÊÇÒªº¦¡£ÊÓÆµ²¥·ÅÆ÷ÊÇÔÚÓ²¼þºÍ²Ù×÷ϵͳ֮¼äÇŽӵÄÈí¼þ×é¼þ£¬ÈÏÕæÊÓÆµÊý¾ÝµÄ½âÂë¡¢ÏÔʾºÍÒôƵͬ²½¡£³£¼ûµÄǶÈëʽÊÓÆµ²¥·ÅÆ÷ÓÐOMX²¥·ÅÆ÷¡¢GStreamerµÈ¡£
OMX²¥·ÅÆ÷£ºOMX£¨OpenMAX£©ÊÇÓÉMPEGLAÍÆ³öµÄÒ»Ì×ÊÓÆµ´¦Öóͷ£API£¬ÆÕ±éÓ¦ÓÃÓÚǶÈëʽװ±¸¡£OMX²¥·ÅÆ÷Äܹ»Ê¹ÓÃ×°±¸µÄÓ²¼þ¼ÓËÙ¹¦Ð§£¬ÊµÏÖ¸ßЧµÄÊÓÆµ½âÂëºÍÏÔʾ¡£Ñ¡ÔñOMX²¥·ÅÆ÷ʱ£¬ÐèҪȷ±£×°±¸?µÄ´¦Öóͷ£Æ÷Ö§³ÖÏìÓ¦µÄOMX¹¦Ð§¡£
GStreamer£ºGStreamerÊÇÒ»¸ö¿ªÔ´µÄýÌå¿ò¼Ü£¬ÆÕ±éÓ¦ÓÃÓÚ¶àÖÖǶÈëʽƽ̨¡£GStreamerÌṩÁ˸»ºñµÄ²å¼þºÍÖ§³Ö¶àÖÖÊÓÆµÃûÌã¬ÊʺÏÐèÒª¸ßÎÞаÐԵĿª·¢Õß¡£GStreamerµÄ¿ªÏú½Ï´ó£¬ÊʺÏ×ÊÔ´½Ï¸»ºñµÄ×°±¸¡£
±àд¼òÆÓµÄ?²¥·ÅÓ¦ÓóÌÐò£ºÈôÊÇÐèÒª¸üÖØ´óµÄÊÓÆµ²¥·Å¹¦Ð§£¬¿ÉÒÔ±àдһ¸ö¼òÆÓµÄÓ¦ÓóÌÐòÀ´¿ØÖÆÊÓÆµ²¥·Å¡£ÏÂÃæÊÇÒ»¸ö¼òÆÓµÄPython¾ç±¾Ê¾Àý£¬Ê¹ÓÃOMX²¥·ÅÆ÷¿ØÖÆÊÓÆµ²¥·Å£º
importosimportsubprocessdefplay_video(video_path):command=f"omxplayer-b{video_path}"subprocess.Popen(command,shell=True)play_video("/path/to/your/video.mp4")
Õâ¸ö¾ç±¾Í¨¹ýŲÓÃOMX²¥·ÅÆ÷µÄÏÂÁîÀ´¿ØÖÆÊÓÆµ²¥·Å£¬²¢¿ÉÒÔÔÚÐèҪʱ×èÖ¹²¥·Å¡£
²âÊÔºÍÓÅ»¯£ºÔÚÍê³É»ù±¾µÄÊÓÆµ²¥·Åºó£¬ÐèÒª¶Ô²¥·Å¾ÙÐвâÊÔºÍÓÅ»¯¡£¿ÉÒÔ²âÊÔ²î±ðÇø·ÖÂʺÍÖ¡ÂʵÄÊÓÆµÎļþ£¬ÕÒµ½×î¼ÑµÄÉèÖ᣿ÉÒÔµ÷½â²¥·ÅÆ÷µÄ²ÎÊý£¬È绺³åÇø¾Þϸ¡¢½âÂëÆ÷ÓÅ»¯µÈ£¬ÒÔÈ·±£ÊÓÆµ²¥·ÅµÄÁ÷ͨÐÔ¡£
Ó²¼þÑ¡ÐÍ
ǶÈëʽϵͳµÄ?Ó²¼þÑ¡ÐÍÖ±½ÓÓ°Ïìµ½ÊÓÆµ²¥·ÅµÄÐÔÄܺÍÁ÷ͨ¶È¡£Ò»Ñùƽ³£À´Ëµ£¬Ñ¡ÔñÒ»¸ö¾ßÓÐǿʢ´¦Öóͷ£ÄÜÁ¦ºÍͼÐδ¦Öóͷ£µ¥Î»£¨GPU£©µÄǶÈëʽ´¦Öóͷ£Æ÷£¬ÈçARMCortex-AϵÁУ¬¿ÉÒÔÏÔÖøÌáÉýÊÓÆµ½âÂëºÍÏÔʾЧÂÊ¡£
´¦Öóͷ£Æ÷£ºÑ¡ÔñÒ»¸öÖ§³ÖÓ²¼þ¼ÓËÙ½âÂëµÄ´¦Öóͷ£Æ÷£¬ÈçRockchipRK3399¡¢AllwinnerA33µÈ¡£ÕâЩ´¦Öóͷ£Æ÷ͨ³£ÄÚÖÃÁËרÓõÄÊÓÆµ½âÂëÒýÇæ£¬Äܹ»´ó?·ù½µµÍÈí¼þ½âÂëµÄ¼ç¸º¡£
´æ´¢£ºÑ¡Ôñ¾ßÓÐ×ã¹»¶ÁдËÙÂʵĴ洢½éÖÊ£¬Èç¸ßËÙSD¿¨»òNANDÉÁ´æ¡£ÊÓÆµÎļþµÄ¶ÁÈ¡ËÙÂÊÖ±½ÓÓ°Ïìµ½²¥·ÅµÄÁ÷ͨ¶È¡£
ÏÔʾÆ÷£ºÑ¡ÔñÖ§³Ö¸ßÇø·ÖÂÊÏÔʾµÄÆÁÄ»£¬Èç720p¡¢1080pµÄ?LCD»òOLEDÆÁÄ»¡£¸ßÇø·ÖÂʵÄÏÔʾÆ÷¿ÉÒÔ¸üºÃµØÕ¹Ê¾ÊÓÆµÄÚÈݵÄϸ½Ú¡£
ʵÀýÆÊÎö£ºÔÚÊ÷Ý®ÅÉÉÏʵÏÖÊÓÆµ²¥·Å
ΪÁ˸üºÃµØÃ÷ȷǶÈëʽÊÓÆµ²¥·ÅµÄʵÏÖÀú³Ì£¬ÎÒÃǽ«ÒÔÊ÷Ý®ÅÉ£¨RaspberryPi£©ÎªÀý£¬ÏêϸÆÊÎöÔõÑùÔÚÕâ¿îСÐÍǶÈëʽװ±¸ÉÏʵÏÖ¸ßЧµÄÊÓÆµ²¥·Å¡£
Ó²¼þ×¼±¸£ºÊ÷Ý®ÅÉÅ䱸ÁËǿʢµÄARM´¦Öóͷ£Æ÷ºÍ¸»ºñµÄÍâÉè½Ó¿Ú£¬ºÜÊÇÊʺÏǶÈëʽÊÓÆµ²¥ÆÌ¿ª·¢¡£³£ÓõÄÊ÷Ý®ÅÉÐͺÅÓÐRaspberryPi3ModelB+¡¢RaspberryPi4µÈ£¬¾ßÓвî±ðµÄÐÔÄܺ͹¦ºÄÌØµã¡£
²Ù×÷ϵͳÓëÈí¼þÇéÐΣºÊ÷Ý®ÅÉͨ³£ÔËÐлùÓÚDebianµÄLinux¿¯Ðа棬ÈçRaspbian¡£ÔÚRaspbianÉÏ£¬¿ÉÒÔʹÓó£¼ûµÄÊÓÆµ²¥·ÅÆ÷ÈçOMX²¥·ÅÆ÷ºÍGStreamer¡£
ÏÖʵ°¸Àý
#include#include#include#include#include#include#include#include//½ç˵ȫ¾Ö±äÁ¿AVFormatContext*fmt_ctx=NULL;AVCodecContext*dec_ctx=NULL;AVPacketpacket;intframeFinished;intframeCount;unsignedchar*frameBuffer;void*decode_thread(void*arg){while(1){intret;if(av_read_frame(fmt_ctx,&packet)<0){break;}packet.stream_index=0;ret=avcodec_send_packet(dec_ctx,&packet);if(ret<0){fprintf(stderr,"Errorsendingapacketfordecoding\n");break;}while(ret>=0){ret=avcodec_receive_frame(dec_ctx,&dec_picture);if(ret==AVERROR(EAGAIN)||ret==AVERROR_EOF){break;}if(ret<0){fprintf(stderr,"Errorwhiledecoding\n");break;}//ÕâÀï¿ÉÒÔ¼ÓÈëÏÔʾ´úÂëusleep(33333);//30fps}av_packet_unref(&packet);}returnNULL;}intmain(intargc,char*argv){if(argc<2){fprintf(stderr,"Usage:%s\n",argv0);return-1;}av_register_all();avformat_network_init();if(avformat_open_input(&fmt_ctx,argv1,NULL,NULL)!=0){fprintf(stderr,"Cannotopeninputfile\n");return-1;}if(avformat_find_stream_info(fmt_ctx,NULL)<0){fprintf(stderr,"Couldnotfindstreaminfo\n");return-1;}av_dump_format(fmt_ctx,0,argv1,0);dec_ctx=avcodec_find_decoder(fmt_ctx->streams0->codec_id);if(!dec_ctx){fprintf(stderr,"Codecnotfound\n");return-1;}if(avcodec_open2(dec_ctx,dec_ctx,NULL)<0){fprintf(stderr,"Couldnotopencodec\n");return-1;}pthread_tthread;pthread_create(&thread,NULL,decode_thread,NULL);pthread_join(thread,NULL);avformat_close_input(&fmt_ctx);return0;}
×Ô¶¯»¯Óë»úеÈ˼¯³É
ÈôÊÇÄú¶Ô»úеÈËÊÖÒÕ¸ÐÐËȤ£¬¿ÉÒÔʵÑé½«Ð¡Íæ¾ßÓë»úеÈ˼¯³É¡£Í¨¹ý½«Ç¶ÈëʽÊÓÆµÏÔʾÆÁ¼¯³Éµ½»úеÈËÌåÄÚ£¬Äú¿ÉÒÔʵÏÖÔ½·¢ÖØ´óµÄ½»»¥¹¦Ð§###7.µçÔ´¹ÜÀíÓë½ÚÄÜÊÖÒÕ
ÔÚÖÆ×÷Ð¡Íæ¾ßǶÈëʽÊÓÆµÕæÈ˰æÊ±£¬µçÔ´¹ÜÀíºÍ½ÚÄÜÊÖÒÕÒ²ÊǺÜÊÇÖ÷ÒªµÄ¡£ÎªÁËÈÃÐ¡Íæ¾ßÔÚ³¤Ê±¼äʹÓÃÖмá³Ö¸ßЧ£¬ÄúÐèÒªÉè¼ÆºÏÀíµÄ?µçÔ´¹ÜÀíϵͳ¡£ÀýÈ磬ͨ¹ýʹÓõ͹¦ºÄµÄµç×ÓÔª¼þºÍÓÅ»¯µç·Éè¼Æ£¬¿ÉÒÔÓÐÓýµµÍ¹¦ºÄ¡£Äú»¹¿ÉÒÔʹÓÿɳäµçµç³Ø£¬²¢Éè¼ÆºÏÊʵijäµç¹ÜÀíϵͳ£¬ÒÔÑÓÉìÐ¡Íæ¾ßµÄʹÓÃÊÙÃü¡£
У¶Ô£º³ÂÇïʵ(f3J1ePQDlzHhwh44q38w4Ima2E3XrDq)



