blacktulip7
易百纳技术社区
易百纳技术社区
0 访问量
0 原创专栏
0 资料
0 粉丝
个性签名:此E友还没有留下个性签名哦~
加入易百纳时间:2013-08-05

个人成就

易百纳技术社区 共获得 0 个点赞
易百纳技术社区 共获得 1 个收藏
易百纳技术社区 共获得 40 次评论/回复

个人勋章

暂无勋章
分类专栏

Ta擅长的领域

暂无
  •     自去年开始,一直有个念头想自己动手写一个IPCAM方案,时至今日,感觉只完成了三分之一的样子,因为需要实现rtmp直播功能,去年已购买了阿里的云服务,服务器端搭建了rtmpserver,板端rtmppublisher这个功能已经完成,通过VLC打开URL:rtmp://120.25.78.126/live/livestream或者使用浏览器打开120.25.78.126均可以观看到实时视频,因服务器我一个人用也是有余有点浪费,现在将rtmpserver分享出来,有需要的同学可以将自己的流推到rtmp://120.25.78.126/live/youStreamName;服务端没有做限制,但是要注意我的服务器带宽只有2M,所以同学们推流的时候控制下自己的码率,一路不要超过256kb,不然的话太大了其他同学就不好玩了。    说下自己的进度吧,到目前为止只开发了这些模块,还有部分模块尚未完成 drwxr-xr-x 2 root root 4.0K Apr 19 09:09 bin               //bin文件eg.codec  dog  MediaServer  MiscController  msgserver  NetworkService  RtmpPublisher  RtspServer drwxr-xr-x 4 root root 4.0K Apr 19 09:21 codec           //codec就不说了,生成音视频数据,然后放到共享缓存里面,Ringbuf都懂的 drwxr-xr-x 2 root root 4.0K Apr 17 12:49 common       -rwxr-xr-x 1 root root 1.4K Apr 17 12:46 Makefile -rwxr--r-- 1 root root 1.4K Apr 17 12:46 Makefile~ -rwxr-xr-x 1 root root  237 Mar  6 10:12 Makefile.param drwxr-xr-x 2 root root 4.0K Apr 19 12:04 MediaBufferMod  //共享缓存实现 drwxr-xr-x 2 root root 4.0K Apr 19 09:21 MediaServer       //基于私有协议的media server,还在开发中…… drwxr-xr-x 4 root root 4.0K Apr 19 09:21 misc                  //正如其名,乱七八糟都丢到这个里面,配置文件啊什么的 drwxr-xr-x 3 root root 4.0K Apr 19 09:21 msgclient           //因采取的是多进程架构,存在一个msgserver,其他进程都是msgclient身份,这部分已经在使用中了 drwxr-xr-x 2 root root 4.0K Apr 19 12:04 msgserver drwxr-xr-x 2 root root 4.0K Apr 19 09:21 NetworkService // 网络相关,网络配置,ntp,之类的,已经完成,后续会增加一些其他的协议支持 drwxr-xr-x 5 root root 4.0K Apr 19 12:04 RtmpPublisher  // rtmp推流,已经完成 drwxr-xr-x 3 root root 4.0K Apr 19 09:21 RtspServer       // rtspserver 不说了,都说烂了,已经完成 drwxr-xr-x 2 root root 4.0K Apr 19 09:21 watchdog         // 看门狗,很简单,开机负责拉起其他进程,后面有谁不听话挂了就重新拉起,已经完成 现在还有存储部分没有开始搞,至于onvif真的不想搞了,因为我的板子基于3518e的,64MB内存,8MB flash,真心不想搞onvif了 这一年多来,娶妻生子,加班,公司换地方事情贼多,没多少空余时间搞这个,有想法有能力的同学可以一起探讨下。 好了,最后一句,中国现在的上行带宽比较坑爹,推流占的都是上行带宽,如果有同学发现rtmp://120.25.78.126/live/livestream打不开什么的,那一定是推流搞得媳妇看视频卡,或者我在玩游戏了,勿怪哈。一般不玩的时候还是会插上的。
    2016-04-20
    24 1 7226
  • 原意是使用ffmpeg抽取一个avi文件里面的视频流,将该视频流存文件,然后将该文件替换掉sdk demo程序里面的sample_d1.h264,执行demo程序,倒是没报错,但是视频就是出不来,错误信息如下: ----------------------------------------------------------------Hi515运行时错误信息---------------------------------------------------------------------------- Version: [Hi3515_MPP_V1.0.2.0 Debug], Build Time[Mar 26 2010, 10:13:19] ------- Perf(us) ------- ID Parse HWdec SWdec SWint HWrprY SWrprY SWintY HWrprC SWrprC SWintC 0    14     0     0     0      0      0      0      0      0      0 ------- Const ------- ID     W   H  AlignW AlignH   Ref DispQue  RmvQue SendQue DescBuf 0   720   576   720   576    16    1919    1983      63  207232 ------- Status ------- ID     W     H   Ref DispQue  RmvQue SendQue DescBuf Out Pic 10Fld State Slot 0     0     0     0       0       0       0       0   1   0     0     0    0 ------ HW Stat ------- ID   Start     Eop   Empty  StartY    IntY  StartC    IntC 0       0       0       0       0       0       0       0 ------- Err Stat ------- ID ErrNalu LostPic  ErrSlc LostSlc Overlap    ErrW    ErrH  ErrRef ErrCncl ErrBigF 0   21688       0       0       0       0       0       0       0       0       0 ------- Flow Stat ------- ID RecvPic  DecPic SendPic RecvAUD  RlsAud RecvEOS    NoFB     Rst     pps     fps 0       0       0       0       0       0       0       0       0       0       0 抽取h264视频流的代码 ----------------------------------------------------------------------------------x86抽取视频流代码------------------------------------------------------------------------------------- #include #include #include #include int main(int argc,char ** argv) {         AVFormatContext *        fmt_ctx                = NULL;         AVPacket                        pkt;         char                        *        file_name        = NULL;         char                        *        out_file        = NULL;         int                                        ret                        = -1;         int                                        video_stream_idx = -1;         int                                        count                = 0;         FILE                        *        fp                        = NULL;         int                                        Mb                        = 0;         if(argc != 3)         {                 printf("need 2 param.\n");                 return -1;         }                 file_name = argv[1];         out_file  = argv[2];         av_register_all();         ret = avformat_open_input(&fmt_ctx,file_name,NULL,NULL);         if(ret < 0)         {                 printf("open input file failed,exit.\n");                 return ret;         }         printf("^^^^^^^^^^^Format :%s ^^^^^^^^^^^^^\n",        fmt_ctx->iformat->name);         ret = avformat_find_stream_info(fmt_ctx,NULL);         if(ret < 0)         {                 printf("find stream failed,exit.\n");                 return ret;         }         ret = av_find_best_stream(fmt_ctx,AVMEDIA_TYPE_VIDEO,-1,-1,NULL,0);         if(ret < 0)         {                 printf("find best stream failed,exit.\n");                 return ret;         }         video_stream_idx = ret;         printf("video encode type:%d\n",fmt_ctx->streams[video_stream_idx]->codec->codec_id);         AVCodecContext* code_ctx = fmt_ctx->streams[video_stream_idx]->codec;         printf("image size width:%d\theight:%d\tpix format:%d",code_ctx->width,code_ctx->height,code_ctx->pix_fmt);                 av_init_packet(&pkt);         pkt.data = NULL;         pkt.size = 0;         printf("press \'q\' to exit\n""press \'c\' to continue\n");         #if 1         if(getchar() == 'q')         {                 goto exit;         }         fp = fopen(out_file,"w+");         if(NULL == fp)         {                 printf("open file %s failed.\n",out_file);         }         else         {                 while(av_read_frame(fmt_ctx,&pkt) >= 0)                 {                         if(pkt.size == 0)                                 break;                         if(pkt.stream_index != video_stream_idx)                         {                                 av_free_packet(&pkt);                                 continue;                         }                         count+=pkt.size;                         if(count/(1024*1024) != Mb)  //打印进度,不用关心                         {                                 Mb = count/(1024*1024);                                 if(Mb%10 == 0 )                                         printf("\n");                                 printf("#");                         }                         if(1 != fwrite(pkt.data,pkt.size,1,fp))                         {                                 printf("write file failed.\n");                                 break;                         }                         //printf("read packet size:%d\tcount:%d\n",pkt.size,count);                                                 av_free_packet(&pkt);                 }         }         fclose(fp);         #endif exit:         avformat_close_input(&fmt_ctx);                 return 0; } 编译通过后执行,打印如下: [root@localhost demuxing]# ./demuxing /work/VM_SHARE/swap/test80m.avi /ext_disk/Hi3515_work/Bin/xxoo.h264 ^^^^^^^^^^^Format :avi ^^^^^^^^^^^^^ video encode type:28 image size width:720    height:544      pix format:0press 'q' to exit press 'c' to continue 打印说明: ^^^^^^^^^^^Format :avi ^^^^^^^^^^^^^  说明输入文件是avi文件 video encode type:28   我查了下codec_id :28正好是AV_CODEC_ID_H264,表明是h264视频流 之后就是视频的尺寸,像素格式了,像素格式查了下,0代表的是    PIX_FMT_YUV420P,   ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) 这上面就是视频的一些属性,与sdk demo程序里面唯一不同的就是视频尺寸的宽度 这是sdk demo里面解码器的配置     stH264Attr.u32PicHeight = 576;     stH264Attr.u32PicWidth = 720;     stH264Attr.u32RefFrameNum = 2;     stH264Attr.enMode = H264D_MODE_STREAM;    希望熟悉视频编解码的朋友指点一二,不胜感激……
    2013-08-12
    12 0 8415
  • 编译运行Hi3515 SDK下面的mpp/sample示例程序vdec,因为例子中使用的是标清设备,我只有VGA显示器,所以就讲例子中的标清设备改成了高清设备,外接vga显示器,终端输入”./sample_vdec 1“,运行到        ret = HI_MPI_VO_SetChnAttr(VoDev, i, &stChnAttr);时总是返回失败,而且返回值是0xffffffff,这个错误码海思手册中也没有说明,之后我在相同的地方调用HI_MPI_VO_GetChnAttr也是同样返回0xffffffff;在这之前VO设备和视频层均已使能,没有出错   以下是错误信息       1.运行时打印错误信息:In SAMPLE_SetVoChnMScreen Get channel 0 attr failed with 0xffffffff!VoDev:0       2.cat /proc/umap/vo /mnt/nfs/Hi3515_platform/Hi3515_SDK_V1.0.4.2.c1/mpp/sample/vdec $ cat /proc/umap/vo Version: [Hi3515_MPP_V1.0.2.0 Debug], Build Time[Mar 26 2010, 10:13:49] ----DEV CONFIG------------------------------------------------ devid   deven     mux outmode pipmode   bkclr  devfrt  tgtfrt      0       1       2       8      -1       0      60      25 ----DEV STATUS---------------------------------------------------------------------- devid videoen freebuf scrnrpt  pixfmt   resoh   resov   dispx   dispy   dispw   disph      0       1       5       0     420     720     576       0       0     720     576 ----GRP STATUS---------------------------------------------------------------------- grpid ondev chnum fulfr tgtfr start resrv   grpgap              basePts ----CHN INFO--------------------------------------------------------------------------- devid chnid  prio bzoom deflk field revrs   chngap              prepts            scalepts ----CHN STATUS-------------------------------------------------------------------------- devid chnid  getcnt freebuf nobfcnt  chnrpt  chnfrt  sndtyp  startx  starty   width  heig 这两天被这个问题搞的凌乱死了,有熟悉海思平台的朋友还望不吝赐教,在线等……
    2013-08-05
    4 0 5479
易百纳技术社区
共3条
易百纳技术社区