yang1372073

yang1372073

0个粉丝

19

问答

0

专栏

2

资料

yang1372073  发布于  2017-01-18 10:00:05
采纳率 0%
19个问答
6314

【已解决】Hi3798M esplay

 
本帖最后由 yang1372073 于 2017-1-19 09:02 编辑

HI3798M 本地播放h265 ES 文件没有异常
但是Hi3798M接网络流实时播放,延时会短时间内累计,会从几百ms增加至5min左右,
1-文件播放
while (!g_StopThread)
    {
        if (g_bVidPlay)
        {
            if (HI_FALSE != g_bReadFrameSize)
            {
                Ret = HI_UNF_AVPLAY_GetBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_VID, 0x100000, &StreamBuf, 0);
            }
            else
            {
                Ret = HI_UNF_AVPLAY_GetBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_VID, 0x4000, &StreamBuf, 0);
            }

            if (HI_SUCCESS == Ret)
            {
                bVidBufAvail = HI_TRUE;

                if (HI_FALSE != g_bReadFrameSize)
                {
                    Readlen = fread(&FrameSize, 1, 4, g_pVidEsFile);
                    if (Readlen == 4)
                    {}
                    else
                    {
                        FrameSize = 0x4000;
                    }
                }
                else
                {
                    FrameSize = 0x4000;
                }

                Readlen = fread(StreamBuf.pu8Data, sizeof(HI_S8), FrameSize, g_pVidEsFile);

                if (Readlen > 0)
                {
                    Ret = HI_UNF_AVPLAY_PutBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_VID, Readlen, 0);
                    if (Ret != HI_SUCCESS)
                    {
                        sample_printf("call HI_UNF_AVPLAY_PutBuf failed.\n");
                    }

                    FrameSize = 0;
                }
                else if (Readlen == 0)
                {
                    if (HI_TRUE == g_PlayOnce)
                    {
                        HI_BOOL bIsEmpty = HI_FALSE;
                        HI_UNF_AVPLAY_FLUSH_STREAM_OPT_S stFlushOpt;

                        sample_printf("Esplay flush stream.\n");
                        HI_UNF_AVPLAY_FlushStream(hAvplay, &stFlushOpt);
                        do {
                            Ret = HI_UNF_AVPLAY_IsBuffEmpty(hAvplay, &bIsEmpty);
                            if (Ret != HI_SUCCESS)
                            {
                                sample_printf("call HI_UNF_AVPLAY_IsBuffEmpty failed.\n");
                                break;
                            }
                        }while(bIsEmpty != HI_TRUE);
                        sleep(5);
                        sample_printf("Finish, esplay exit!\n");
                        exit(0);
                    }
                    else
                    {
                        sample_printf("read vid file end and rewind!\n");
                        rewind(g_pVidEsFile);
                    }
                }
                else
                {
                    perror("read vid file error\n");
                }
            }
            else
            {
                bVidBufAvail = HI_FALSE;
            }
        }

        if (g_bAudPlay)
        {
            Ret = HI_UNF_AVPLAY_GetBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_AUD, 0x1000, &StreamBuf, 0);
            if (HI_SUCCESS == Ret)
            {
                bAudBufAvail = HI_TRUE;
                Readlen = fread(StreamBuf.pu8Data, sizeof(HI_S8), 0x1000, g_pAudEsFile);
                if (Readlen > 0)
                {
                    counter++;
                    Ret = HI_UNF_AVPLAY_PutBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_AUD, Readlen, 0);
                    if (Ret != HI_SUCCESS)
                    {
                        sample_printf("call HI_UNF_AVPLAY_PutBuf failed.\n");
                    }
                }
                else if (Readlen == 0)
                {
                    sample_printf("read aud file end and rewind!\n");
                    rewind(g_pAudEsFile);
                    if (g_AudEsFileOffest)
                    {
                        fseek(g_pAudEsFile, g_AudEsFileOffest, SEEK_SET);
                    }
                }
                else
                {
                    perror("read aud file error\n");
                }
            }
            else if (Ret != HI_SUCCESS)
            {
                bAudBufAvail = HI_FALSE;
            }
        }

        /* wait for buffer */
        if ((HI_FALSE == bAudBufAvail) && (HI_FALSE == bVidBufAvail))
        {
            usleep(1000 * 10);
        }
    }
2-实时播放
   while (!g_StopThread)
    {
#ifdef TIME_PRINT
        gettimeofday(&startTime,NULL);
#endif
        ret_len = airrx_read(tsbuf, 188);
        Readlen = TsDemux(tsbuf, ret_len, ts_header, pat_header, pmt_header, ts_pes, bitstream, &bitstream_type);
        if(Readlen <= 0)
            continue;

        if (g_bVidPlay && ((bitstream_type==H264)||(bitstream_type==H265)))  //video
        {
            memcpy(video_buf, *bitstream, sizeof(unsigned char)*Readlen);
            video_buf += Readlen;
            i += Readlen;
            if(i <= 0x80)
                continue;

            Ret = HI_UNF_AVPLAY_GetBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_VID, i, &StreamBuf, 0);

            if (HI_SUCCESS == Ret)
            {
                bVidBufAvail = HI_TRUE;              
                video_buf = video_buf - i;
                memcpy(StreamBuf.pu8Data, video_buf, sizeof(unsigned char)*i);

                if(0)
                {
                    static FILE *f;
                    static int flag;
                    if (!flag)
                    {
                        f = fopen("video.h265","wb");
                        flag = 1;
                    }

                    fwrite(StreamBuf.pu8Data, 1, i,f);
                }
                if (i > 0)
                {
                    Ret = HI_UNF_AVPLAY_PutBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_VID, i, -1);
                    if (Ret != HI_SUCCESS)
                    {
                        sample_printf("call HI_UNF_AVPLAY_PutBuf failed.\n");
                    }
#ifdef TIME_PRINT                    
                    gettimeofday(&endTime, NULL);  
                    Timeuse = 1000000*(endTime.tv_sec - startTime.tv_sec) + (endTime.tv_usec - startTime.tv_usec);  
                    printf("Timeuse = %f\n", Timeuse);
#endif
                    i = 0;
                }
                else if (i == 0)
                {

                }
                else
                {
                    perror("read vid file error\n");
                }
            }
            else
            {
                bVidBufAvail = HI_FALSE;
            }
        }

        if (g_bAudPlay && (bitstream_type==AAC))  //audio
        {
            memcpy(audio_buf, *bitstream, sizeof(unsigned char)*Readlen);
            audio_buf += Readlen;
            j += Readlen;
            if(j <= 0x20)
                continue;

            Ret = HI_UNF_AVPLAY_GetBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_AUD, j, &StreamBuf, 0);
            if (HI_SUCCESS == Ret)
            {
                bAudBufAvail = HI_TRUE;
                audio_buf = audio_buf - j;
                memcpy(StreamBuf.pu8Data, audio_buf, sizeof(unsigned char)*j);

                if (j > 0)
                {
                    Ret = HI_UNF_AVPLAY_PutBuf(hAvplay, HI_UNF_AVPLAY_BUF_ID_ES_AUD, j, -1);
                    if (Ret != HI_SUCCESS)
                    {
                        sample_printf("call HI_UNF_AVPLAY_PutBuf failed.\n");
                    }

                    j = 0;
                }
                else if (j == 0)
                {
                    sample_printf("read aud file end and rewind!\n");
                }
                else
                {
                    perror("read aud file error\n");
                }
            }
            else if (Ret != HI_SUCCESS)
            {
                bAudBufAvail = HI_FALSE;
            }
        }

        /* wait for buffer */
        if ((HI_FALSE == bAudBufAvail) && (HI_FALSE == bVidBufAvail))
        {
            usleep(1000 * 10);
        }
    }
我来回答
回答10个
时间排序
认可量排序

yang1372073

0个粉丝

19

问答

0

专栏

2

资料

yang1372073 2017-01-19 09:03:31
认可0
帧率解析错误

9527

0个粉丝

3

问答

0

专栏

0

资料

9527 2017-05-17 10:12:34
认可0
楼主,我也在实时播放时遇到点问题。  本地播放没有问题,live555接收到的实时RTSP视频流,直接送入HI_UNF_AVPLAY_PutBuf()却无法出图。将该实时流保存成文件在播放都可以正常播放。  不知什么原因。。。:'(

liu417465778

0个粉丝

7

问答

0

专栏

0

资料

liu417465778 2017-05-18 16:40:50
认可0
楼主,你3798播放的时候,有声音输出吗?我目前遇到的问题是只有视频,没有音频输出。我手里面的SDK缺少音频解码库。

yang1372073

0个粉丝

19

问答

0

专栏

2

资料

yang1372073 2017-05-19 08:54:22
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=49863&ptid=13991]9527 发表于 2017-5-17 10:12[/url]
楼主,我也在实时播放时遇到点问题。  本地播放没有问题,live555接收到的实时RTSP视频流,直接送入HI_UNF_ ...[/quote]

HI_UNF_AVPLAY_PutBuf()那你播的是ES流了,先用sample/rawplay或者esplay试一下了。
既然保存成文件可以播放,那么可以断定流没有问题。估计是显示播放属性或者播放流程有问题。

yang1372073

0个粉丝

19

问答

0

专栏

2

资料

yang1372073 2017-05-19 08:55:36
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=49952&ptid=13991]liu417465778 发表于 2017-5-18 16:40[/url]
楼主,你3798播放的时候,有声音输出吗?我目前遇到的问题是只有视频,没有音频输出。我手里面的SDK缺少音 ...[/quote]

额,不知道你用什么音频编码器。可以去搞了AAC的编解码库,发送、接收分别调用就行了

9527

0个粉丝

3

问答

0

专栏

0

资料

9527 2017-05-25 11:43:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=49978&ptid=13991]yang1372073 发表于 2017-5-19 08:54[/url]
HI_UNF_AVPLAY_PutBuf()那你播的是ES流了,先用sample/rawplay或者esplay试一下了。
既然保存成文件可以 ...[/quote]

谢谢,确实是我的送入方式有问题。  海思不是需要送入00  00  00   01 的头吗,   需要在每一帧的前面加上头,一次送入才可以。之前是分两次送入的,先送头(4字节),在送如帧内容,在HI3536上这样都没有问题的。

yu0316

1个粉丝

5

问答

0

专栏

1

资料

yu0316 2017-09-07 20:13:00
认可0
请问有linux版本sdk吗

yu0316

1个粉丝

5

问答

0

专栏

1

资料

yu0316 2017-09-13 10:42:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=49979&ptid=13991]yang1372073 发表于 2017-5-19 08:55[/url]
额,不知道你用什么音频编码器。可以去搞了AAC的编解码库,发送、接收分别调用就行了[/quote]

请问延时累计问题你怎么解决的

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2017-09-13 13:57:38
认可0
:):):):):):):):):)

kekey520

0个粉丝

3

问答

0

专栏

0

资料

kekey520 2018-04-26 15:49:36
认可0
:handshake
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区