通过ffplay实现摄像头preview

硬件平台:Jetson TK1 开发板(NVIDIA Tegra K1 Mobile Processor 32bit),宁波舜宇光电SP103A(OV16825)模组
软件平台:Ubuntu/Linaro 4.8.2-16ubuntu4(Linux version 3.10.40 32bit)

摄像头驱动已经实现,支持v4l2的接口。

首先安装SDL库,第一次通过源代码安装的SDL-1.2.14版本,使用时总是提示SDL初始化失败。第二次先输入命令“sudo apt-get remove libsdl1.2debian”,“sudo apt-get install libsdl1.2-dev”,再通过源代码安装SDL-1.2.15问题解决了。

然后安装x264,步骤比较简单
$git clone git://git.videolan.org/x264.git
$cd x264
$./configure
$make
$sudo make install

最后安装ffmpeg,通过git下载官网最新的版本,当前版本是2.8版本,通过configure --enable-memalign-hack --enable-static,make, sudo make install安装就可以了。

我们的驱动输出的是sensor的原始数据,为bayer raw10格式,每个颜色占用16bit,只有低10位是有效数据,顺序为bggr。ffmpeg的原始代码是不支持raw10的,需要做一定的修改。原始代码支持bayer raw8和bayer raw16, 因为bayer raw10和bayer raw16一样都是占用两个字节,所以我们参考bay raw16修改。首先在libavdevice/v4l2-common.c中的ff_fmt_conversion_table中增加一项,这里我们直接借用raw16格式,在应用看来raw10作为raw16处理,在v4l2接口调用时使用V4L2_PIX_FMT_SBGGR10。

{ AV_PIX_FMT_BAYER_BGGR16LE, AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_SBGGR10 },

对于raw16,目前的代码在libswscale/bayer_template.c中BAYER_SHIFT设置为8,表示低位的8位直接舍弃,因为raw10只能舍弃低2位,所以我们将BAYER_SHIFT设置为2。

为了方便调试可以将libavutil/log.c中av_log_level从AV_LOG_INFO改成AV_LOG_TRACE,输出更多信息。

做完以上修改后重新编译,安装ffmpeg,然后使用命令"ffplay -f v4l2 -input_format bayer_bggr16le -video_size 4608x3456 -i /dev/video0"就可以实现预览了,如果还是提示SDL初始化失败,可以在shell中输入DISPLAY=:0和export DISPLAY命令设置一下DISPLAY。

通过ffplay实现摄像头preview的更多相关文章

  1. Android 用MediaCodec实现视频硬解码(转)

    本文向你讲述如何用android标准的API (MediaCodec)实现视频的硬件编解码.例程将从摄像头采集视频开始,然后进行H264编码,再解码,然后显示.我将尽量讲得简短而清晰,不展示 那些不相 ...

  2. Android 用MediaCodec实现视频硬解码

    http://blog.csdn.net/halleyzhang3/article/details/11473961 http://www.360doc.com/content/14/0119/10/ ...

  3. 基于flash的web视频对讲直播测试

    由于项目的需求,要在web上实现视频通话的需求.现成的方案有WebRTC,基于浏览器的成熟方案,但是这个方案和公司项目需求有几个点冲突.后来考虑到基于flash的方案.参考雷神的博客 simplest ...

  4. FFmpeg采集音视频数据命令

    文章转自:https://www.jianshu.com/p/4709ccbda3f9 1.ffmpeg 把文件当做直播推送至服务器 (RTMP + FLV) ffmpeg - re -i demo. ...

  5. ffplay 播放网络摄像头视频

    shell脚本如下,无须加port ffplay rtsp://cameral_ip

  6. 摄像头视频捕捉(简单通用--通过IsampleGrabberCB实现)

    前言 DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布.DirectShow为多媒体流的捕捉和回放提供了强有力的支持.用Direct ...

  7. linux下motion摄像头监控编译与配置

    利用linxu下的开源的motion搭建嵌入式视频动态监控系统 所谓移动图像监测,简单来说就是利用摄像头定点监测某个区域,当有移动物体经过时,摄像头便自动抓拍(要监测多大物体.按拍照速率都是可调的), ...

  8. matlab2015b调用摄像头

    参考链接:http://blog.csdn.net/lyqmath/article/details/7307429 本人电脑是宏碁T5000 调用代码: % By lyqmathclc; clear ...

  9. MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

    1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...

随机推荐

  1. Web服务端性能提升实践

    随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...

  2. Java Graphics 图形绘制

    Graphics类提供基本绘图方法,Graphics类提供基本的几何图形绘制方法,主要有:画线段.画矩形.画圆.画带颜色的图形.画椭圆.画圆弧.画多边形.画字符串等. 画线段 drawLine pub ...

  3. 基于json-lib-2.2.2-jdk15.jar的JSON解析工具类大集合

    json解析之前的必备工作:导入json解析必须的六个包 资源链接:百度云:链接:https://pan.baidu.com/s/1dAEQQy 密码:1v1z 代码示例: package com.s ...

  4. MongoDB之数据库管理

    前面补充过把MongoDB作为服务,今天主要了解数据库管理,在操作之前先把MongoDB服务打开. 一.显示数据库清单 如果想查看数据库列表可以使用show dbs. 二.切换数据库 通过使用Mong ...

  5. Task.Factory.StartNew和Task.Run

    在系统中单开线程进行操作,经常用到Task,发现Task主要有以下两种方法 Task.Factory.StartNew(() => { }); Task.Run(() => { }); 初 ...

  6. Iframe内联框架

    iframe:内联框架标签,用于在网页中任意的位置嵌入另一个网页 <iframe src="url地址"> </iframe> iframe标签的常用属性 ...

  7. [转] 疯狂的JSONP

      何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域 ...

  8. 添加List集合覆盖问题

    今天在做一个项目的时候,发现了这样一个问题,为了让大家看得更直接明了,我直接放代码: public void InsertObjectToList(){ List<NewsProtetype&g ...

  9. 三角形-->九九乘法表

    使用嵌套循环打印九行*组成的三角形: * ** *** ...... *********(9个) public class Triangle { /** * 使用嵌套循环打印九行*组成的三角形 */ ...

  10. 为 HTTP/2 头压缩专门设计的 HPACK

          HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量.如何理解 HPACK 压缩呢? 如果我们约定将常用的请求头的参数用一些特殊的编号来表示,比如 GET ...