
blacktulip7


0 访问量
0 原创专栏
0 资料
0 粉丝
个性签名:此E友还没有留下个性签名哦~
加入易百纳时间:2013-08-05
-
自去年开始,一直有个念头想自己动手写一个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-2024 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-1212 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-054 0 5479

共3条