完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
项目描述:摄像机拍摄1080p高清视频,编码成h.264格式后,通过网线传输给路由器,客户端通过rtsp地址观看视频
暂定方案:高清视频经FPGA编码成h.264格式,传给树莓派,树莓派将h264码流通过网线传输给路由器 问题:刚接触树莓派,不知树莓派编程方面如何下手,需要学哪些东西,求大神给个指导性的建议~ ps:该方案不知是否可行,希望大家也提点建议~ |
|
相关推荐
42个回答
|
|
liveMedia/libliveMedia.a .是什么平台的啊?这个静态库应该是需要arm版本的,如果没有arm版本的那就需要有源源码重新编译为arm平台,看来之前的问题不是64位与32位的问题,而是X86架构与arm构架的问题。不过Linux最好还是用32位平台的,之前我用64位编译东西时就出了不少错。
|
|
|
|
live555官方源码下到ubuntu里,输入:
tar xvf live555-latest.tar.gz cd live ./genMakefiles linux make 产生的可执行文件在ubuntu里均能够无误运行 |
|
|
|
新进展,真是一波三折
感谢鱼总和各位朋友的帮助,在百忙之中帮我分析问题,有了你们论坛才有源头活水。先感慨一下,这个论坛的版主很负责,有些论坛基本问了就没人回答,毕竟这是双向的,论坛帮助了我们,我们才会更好的反馈,比如这个项目要是完工了,发帖全程记录下来,为更多的朋友提供参考,这样论坛才是活的嘛。下面报告调试记录: 之前live555是这样编译的 ./genMakefiles linux make 现在把config.armlinux文件的 CROSS COMPILE? = arm-elf 改成 CROSS COMPILE? = arm-linux 终端输入: ./genMakefiles armlinux make 这样live555的库就是arm版本的了,上述问题没了,出现如下问题: 我尝试着写了makefile,上面截图是运行make产生的,makefile文件贴在下面: ###################################Makefile#################################### LIVE555= .. CXX = arm-linux-g++ CC = arm-linux-gcc all: ccl LIB_SUFFIX=a INCLUDES = -I$(LIVE555)/UsageEnvironment/include -I$(LIVE555)/groupsock/include -I$(LIVE555)/liveMedia/include -I$(LIVE555)/BasicUsageEnvironment/include CXXFLAGS= -c -fPIC $(INCLUDES) USAGE_ENVIRONMENT_DIR = $(LIVE555)/UsageEnvironment USAGE_ENVIRONMENT_LIB = $(USAGE_ENVIRONMENT_DIR)/libUsageEnvironment.$(LIB_SUFFIX) BASIC_USAGE_ENVIRONMENT_DIR = $(LIVE555)/BasicUsageEnvironment BASIC_USAGE_ENVIRONMENT_LIB = $(BASIC_USAGE_ENVIRONMENT_DIR)/libBasicUsageEnvironment.$(LIB_SUFFIX) LIVEMEDIA_DIR = $(LIVE555)/liveMedia LIVEMEDIA_LIB = $(LIVEMEDIA_DIR)/libliveMedia.$(LIB_SUFFIX) GROUPSOCK_DIR = $(LIVE555)/groupsock GROUPSOCK_LIB = $(GROUPSOCK_DIR)/libgroupsock.$(LIB_SUFFIX) LOCAL_LIBS = $(LIVEMEDIA_LIB) $(GROUPSOCK_LIB) $(BASIC_USAGE_ENVIRONMENT_LIB) $(USAGE_ENVIRONMENT_LIB) ccl: ccl.o capture.o compress.o S***SipMfcEncAPI.o $(LOCAL_LIBS) $(CC) -o $@ $^ -fPIC -L/usr/local/lib -lpthread -lstdc++ S***SipMfcEncAPI.o:S***SipMfcEncAPI.c $(CC) $(CXXFLAGS) $< compress.o:compress.c $(CC) $(CXXFLAGS) $< capture.o:capture.cpp $(CXX) $(CXXFLAGS) $< ccl.o:ccl.cpp $(CXX) $(CXXFLAGS) $< clean: rm *.o rm ccl #######################################END####################################### 从截图的错误看出ccl.cpp里没有定义vc_open(),vc_compress(),vc_close()这三个函数,但我include了compress.h 如下: extern "C" { #include "compress.h" } 因为compress.c是个c文件,ccl.cpp是个c++文件,c++调用c函数,要加extern "C" 为什么会undefined reference?? 这三个函数是在ccl.cpp里一个class的成员函数里调用的,但成员函数也调用了capture.cpp里的函数,确没报错~~。。~~ 对了,有一点,我后来把 extern "C" { #include "compress.h" } 直接改成 extern "C" { void *vc_open (int width, int height, int fps); int vc_close (void *ctx_t); int vc_compress (void *ctx_t,Picture *pic); } 报错如下: 意思好像是说,这三个函数之前用C++ linkage定义的,后来又用C linkage来定义,这就冲突了,我就哭了 在makefile里明明是用CC编译的,搞不懂了 |
|
|
|
唉,说实话,C,C++这块我也不是很懂。
帮你乱分析一下吧:compress.c中有没有这三个函数,compress.c是不是放到了和compress.h同一个文件夹? 通过搜索得知,还可以预处理一下C的头文件。比如通过以下方式: a.h: #ifndef __A_H #define __A_H #ifdef __cplusplus extern "C" { #endif int ThisIsTest(int a, int b); #ifdef __cplusplus } #endif #endif 这样处理C的头文件后直接在Cpp里调用就可以了。 |
|
|
|
欢迎常来交流
|
|
|
|
|
|
|
|
V4L?为啥不用V4L2?linux 2.6之后就有了。还有。你这似乎是调用的库间接调用V4L?
|
|
|
|
是V4L2啊,capture.cpp定义了三个函数,全是V4L2相关的
void *capture_open (const char *dev_name, int t_width, int t_height) //打开v4l2设备 int capture_get_picture(void *id, Picture *pic) //获得一帧图片,nv12格式 int capture_close (void *id) //关闭v4l2设备 直接贴代码看不清,代码跟注释都一个颜色,为了方便看代码,换一楼贴 这三个函数见下一楼,30楼 |
|
|
|
|
|
|
|
|
|
|
|
发的贴子不能包含E_X_E_C这个Word。不是BUG,最近审查严格
|
|
|
|
召唤会live555的最好了,最新进展已直播,问题仍然处在live555上
|
|
|
|
就要这样,加精了!
|
|
|
|
支持一下
|
|
|
|
关于Live555 的编译,live555在树莓派上直接编译通过呢
跨平台交叉编译,你是用的树莓派官方的交叉编译工具吗? 我在树莓派上是这么编译的 #把config.armlinux文件的 CROSS COMPILE?= arm-elf 改成 CROSS COMPILE?= "" #然后 ./genMakefiles armlinux make 编译通过了,或者你可以把那个交叉编译工具指向树莓派Github上的官方的交叉编译工具试试。 关于H264的Profile和Level 这儿有篇文章详解:http://xcshen.blog.51cto.com/2835389/552669 这是里边的图,你把00000替换成相应的数字试试呢? |
|
|
|
当你看到这段文字时,你无法理解此刻楼主的心情,现在0:42分,重大突破,也许你觉得楼主很傻X,这破玩意你可能几年前就弄出来了,但对于楼楼这样一个小白。。。。而且今天卡了一天了,临睡前惊喜地看到画面了,再说都要哭出来了,直接上图:
马赛克严重,静态景物比较清晰,动态时就更加严重,下图为证: 大约过了10+秒,自己恢复了,见下图 这张比较清晰,当画面程静态时,就会逐渐变清晰,这种自我修复的功能源于264编码特性 恢复时长应该跟I帧周期有很大关系吧 都好几天了,一直不出画面,今天意外惊喜 兴奋的都睡不着了,明天开始调参数 时候不早了,简单说一下原因: mfc编码初始化之后,要获取header,我存到文件里了,但没有送给live555,只是把每一帧编码数据送给live555,但这个header至关重要,他包 含了视频文件的帧率、sps、spp、扩展信息,没有这些信息是无法解码的,这就是为什么pc显示时间进度条确没有画面出现。 当然,我上午就加了header,还是不出画面,真实坎坷啊。。。。 加了header后,播放几帧获取SDPLine后,有一个类直接析构了,然后整个程序崩溃,出现Segmentation fault段错误,没在意,一直在找析构的 原因,一直在看live的代码,陷入了在live555的代码中,浪费了不少时间 无意间又看了看自己的代码,大概知道那个段错误的原因了,因为以前也遇到过,就是为一个指针申请了内存空间malloc(),却忘了释放空间 free(),导致内存泄漏,我只是为了消除哪个段错误,睡前至少解决一个小bug,不然今天一点进展没有,没想到意外就发生了,就有画面了 延时1~2秒 其实后面的事还有挺多,调参数,增大画面,改善延时,移植底层视频驱动,估计逃不了加声音。。。 关于mfc编码参数,我的压缩比已经达到惊人的400+,原来一帧115200字节,编码后100不到,有的甚至才12字节,画 质好就怪了。所以希望大家给点参考,我不要那么高的压缩比,我要画质! 另外怎么加音频,是另加一路音频编码还是直接传输mpg格式,这个格式好像自带音视频;如果另加一路音频,那么音视频如何同步,live555能 做到音视频两路同时直播吗,是否涉及多线程,所以问题还很多, 希望接触过这个的朋友们一起讨论~~ 在此特别感谢 咕唧咕唧的帮助 http://blog.csdn.net/liukun321/article/details/24390379 不然我也不会想到加header |
|
|
|
|
|
|
|
加油!
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
649 浏览 1 评论
2098 浏览 5 评论
2403 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2160 浏览 6 评论
2142 浏览 7 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
289浏览 9评论
283浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
419浏览 6评论
284浏览 5评论
331浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 16:11 , Processed in 0.983462 second(s), Total 67, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号