海思工具速率报错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了海思工具速率报错相关的知识,希望对你有一定的参考价值。
海思工具速率报错:可能原因一:编码速度快于live555传输速度
海思压缩好H.264放在里面,程序去取,但是live555,直接去取,网络发送的速度肯定赶不上他采集压缩的速度,所以这个时候,就要做一个fifo,当一个中间的作用,把海思自带缓冲池里面的数据,实时的取出来放到fifo,里面。比如定义fifo的空间为1024K,这个时候,如果超出1024K就丢掉一些数据,这样保证每次取到的数据都是最新的视频数据,这样看起来延时就稍多了。
这种方法,想之后再去试下,现在贴出,用fifo的测试程序:
//============================================================================
// Name : FIFOTest01.cpp
// Author : frank
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
//http://blog.chinaunix.net/uid-12045105-id-2963178.html
#include <iostream>
using namespace std;
#define BUFSIZE 2048
#define WR 1 //写数据标志
#define RD 0 //读数据标志
typedef struct FifoType
unsigned int buffer[BUFSIZE]; /* Circular buffer */
unsigned int w_idx; /* Index of write */
unsigned int r_idx; /* Index of read */
*pFifoType;
int fifoctl(pFifoType priv ,int data ,const unsigned char flag)
int temp = -1;
unsigned int widx = 0;
widx = priv->w_idx; /* Save the old index before proceeding */
if (flag == WR) //write data
/* Save it to buffer */
if (((priv->w_idx + 1)) == priv->r_idx)
/* Adjust read index since buffer is full */
/* Keep the latest one and drop the oldest one */
priv->r_idx = (priv->r_idx + 1);
cout<< "buffer full\n";
priv->buffer[priv->w_idx] = data;
//cout <<"before priv->w_idx= "<< priv->w_idx + 1<< endl;
priv->w_idx = (priv->w_idx + 1);
cout <<"after priv->w_idx= "<< priv->w_idx<< endl;
else //read data
if ((priv->r_idx == widx))
cout << "buffer empty\n";
else
temp= priv->buffer[priv->r_idx];
priv->r_idx = (priv->r_idx + 1);
cout<< "priv->r_idx " << priv->r_idx << endl;
return temp;
int main()
int i = 0;
int data = 0;
pFifoType priv = new FifoType;
priv->r_idx = 0;
priv->w_idx = 0;
for(i = 0; i < 3; i++)
fifoctl(priv,i,WR);
for(i = 0; i < 4 ; i++)//
data = fifoctl(priv,data,RD);
cout << data << endl;
delete priv;
priv = NULL;
return 0;
可能原因二:时间戳问题
这个问题也是在海思群里问的各位同学,说可能l在将数据打包成RTP数据包的时候出现时间戳问题;附上聊天记录
海思-延时-问题同 10:42:51
http://bbs.csdn.net/topics/360174753
海思-延时-问题同 10:43:00
live555 MediaSubsession有个函数:getNormalPlayTime帮你计算了你想要的pts。
海思-延时-问题同 10:43:38
视频90K的采样率,根据帧率打。
海思-延时-问题同 10:44:11
好像它这个时间戳,并不是绝对时间,而是相对时间
海思-延时-问题同 10:44:20
所以可能就会越放越慢
海思-延时-问题同 10:44:27
延时越大
Frank范 10:44:41
不是越放越慢。而是一直差不多是一个速度
海思-延时-问题同 10:44:40
我之前好像就是这样的
Frank范 10:45:12
难道不是编码的速度快,而传输的速度慢么
海思-延时-问题同 10:47:13
http://xingyunbaijunwei.blog.163.com/blog/static/765380672012362040605/
这个文章不错
Frank范 10:50:50
好,
Frank范 10:51:11
你觉得是不是编码速度快,传输速度慢呢
Frank范 10:51:22
昨天有个人是这样建议我的
Frank范 10:51:29
让我做个fifo
海思-延时-问题同 10:51:29
嗯
海思-延时-问题同 10:51:39
编码不用怀疑,不会慢的
海思-延时-问题同 10:52:03
我当时是用共享内存
Frank范 10:52:12
就是编码的数据都放到缓存池中,然后来不及发
海思-延时-问题同 10:52:55
也不是,应该是时间戳问题,live555存者不发
这是另外一个热心朋友提示我的:
1、看看是不是编码本身造成的
2、时间戳有没有更新
你抓包看,看不同的数据包时间戳是不是打对了
发现epochtime数据包大概70/s,也就是说打包的时间戳是没问题的。
分包的时间戳是不变的
但是如果不同的不包的时间戳都一样,那播放器会等好久才会解一包数据
那么延时会很大
3还有即使查查每次调用到你拷贝数据的那个地方的时间,看看他调用到你拷贝数据哪里的时间每次是多少
4你可以启用一个线程编码,编码后放到队列里面,然后发送时候直接从队列里面取已经编码好的数据。 参考技术A 海思工具速率报错
答:为了解决这问题,最好的做法还是抛开旧内核的配置,根据产品要求重新裁剪内核较为合适。 具体实现方法,可参考【海思内核裁减方法】...
海思芯片解码出错的解决办法 - 雨声不在的博客 -
可能是海思有自己的算法; 可能是数据流的编码方式有问题。 2019.8.30 编码端做了修改,客户端无需绕过。验证修改有效。
基于海思3520DV400移植 WK2168驱动
对于wk2168驱动移植,厂家提供了驱动和移植文档,由于厂家驱动程序是基于瑞芯微平台的,移植到海思平台不能完全按照文档方法,这里说说需要修改的地方,给需要的人避坑。
1.修改dts
按照官方文档,修改spi速率,模式,这里不需要添加中断引脚。我使用的是spi0,海思dts修改如下:
2.修改驱动代码,由于没有在设备树中添加中断引脚,不使用设备树获取GPIO信息,直接在驱动代码中初始化相应的GPIO,并配置中断为低电平触发(这里注意,千万不可以在内核中配置使用GPIO)
3.请求中断时,由于之前引脚配置了低电平触发,只设置中断为共享中断
4.修改中断函数,根据RIS寄存器判断中断是否产生
这里有我修改好的驱动代码,供需要的人下载
以上是关于海思工具速率报错的主要内容,如果未能解决你的问题,请参考以下文章