海思小白

海思小白

0个粉丝

16

问答

0

专栏

0

资料

海思小白  发布于  2025-07-15 13:54:07
采纳率 0%
16个问答
231

通过LIVE555传输视频画面 是这样写的吗 有大佬指点一下吗

 

HI_S32 LIVE555_SendVideoFrame(VENC_STREAM_S* pstStream) {
if (!isRunning || pstStream == NULL) {
return HI_FAILURE;
}

// 遍历所有数据包
for (HI_U32 i = 0; i < pstStream->u32PackCount; i++) {
    VENC_PACK_S* pstPack = &pstStream->pstPack[i];

    // 映射物理地址到虚拟地址(根据海思SDK正确用法)
    HI_U8* pVirAddr = (HI_U8*)HI_MPI_SYS_Mmap(pstPack->u64PhyAddr, pstPack->u32Len);
    if (pVirAddr == NULL) {
        fprintf(stderr, "Failed to mmap physical address\n");
        continue;
    }

    // 创建帧结构
    H264Frame frame;
    frame.size = pstPack->u32Len;
    frame.data = new unsigned char[frame.size];
    gettimeofday(&frame.timestamp, NULL);

    // 复制帧数据
    memcpy(frame.data, pVirAddr, frame.size);

    // 解除映射
    HI_MPI_SYS_Munmap(pVirAddr, pstPack->u32Len);

    // 将帧加入队列
    pthread_mutex_lock(&queueMutex);

    // 如果队列已满,丢弃最老的帧
    if (frameQueue.size() >= MAX_FRAME_QUEUE_SIZE) {
        delete[] frameQueue.front().data;
        frameQueue.pop();
    }

    frameQueue.push(frame);
    pthread_cond_signal(&queueCond);
    pthread_mutex_unlock(&queueMutex);
}

return HI_SUCCESS;

}

我来回答
回答4个
时间排序
认可量排序

wjz

14个粉丝

3

问答

0

专栏

6

资料

wjz 2025-07-15 14:48:31
认可1

memcpy(pBuffer + realSize, stStream.pack[i].addr+stStream.pack[i].offset, stStream.pack[i].len-stStream.pack[i].offset); 直接拷贝就好了啊,要啥map

wjz
wjz   回复   海思小白  2025-07-16 14:25:27
0

VENC_STREAM_S pstStream 这个结构体里面是一帧,for循环把他们拼起来,再塞到队列里面发出去

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区