崭露头角

接下来以还是自带的历程获取venc码流,然后传入涂鸦,这样就可以在手机上看见视频流了。

1、将sample/sample_venc.c原先的main函数屏蔽掉或者改名,我们使用SAMPLE_VENC_H265_H264函数进行修改:

2、将最终产生码流的地方拷过来,在sample_venc.c通过SAMPLE_COMM_VENC_StartGetStream函数创建一线程去不断的获取码流:

3、将上述函数以及对应开的线程一并拷贝到sample_venc.c,需要注意的是函数里面涉及的一个全局的结构体变量和线程变量也需要拷贝过来,拷贝过去需要将这两个函数改名,否则编译时会出现重复编译的错误:

4、在main函数里面直接调用SAMPLE_VENC_H265_H264,然后直接编译,编译过程过程功能排除一些语法错误,直到编译通过。

5、将涂鸦sdk加入到工程,涂鸦sdk主要分了三个部分一个是库,一个是zlib,还有一个就是ipc用户的接口我们将其移植到工程。

6、将原先user_main.c的main函数换成一个函数来给外层的main函数调用,传参传入一个token便可。

7、将编码流传给涂鸦平台的接口在tuya_ipc_media_demo.c文件中,通过thread_live_audio上传音频流,通过thread_live_video上传视频流,所以现在需要实现的东西就是在sample_venc.c原先的编码码流线程函数改成一个调用一次取一次流的函数,然后调用这个接口来获取编码流传递给涂鸦。

8、在原先的编码线程函数SAMPLE_COMM_VENC_GetVencStreamProc中已经存在一个将码流数据保存文件的接口,所以我们从这里切入:

9、找到输出码流的buffer地址以及buffer的大小,主要是stStream这个成员里面的数据:

10、自己封装一个接口传入stStream用于获取码流,放在保存文件函数的下面便可:

11、这个函数的实现主要将编码流拷贝到一个缓冲区,这里用一个结构体来存放:

12、将原先的线程函数改成一个单次调用的函数,将while注释掉,然后将下面的返回改成return:

13、封装一个产生编码流的函数,根据SAMPLE_COMM_VENC_StartGetStream改写,将原先的两个通道改成只需要获取H264编码:

14、将SAMPLE_VENC_H265_H264函数里面相关H265编码通道注销掉,视频编码的线程改成单通道,详细修改见源码。

15、然后在涂鸦thread_live_video线程里面调用。

16、对码流信息设置:

17、重新编译,然后推至版端运行。

源码下载

链接:https://pan.baidu.com/s/1WJPsgo_7ADsp8dMFafjTZQ
提取码:4rq6

文档更新时间: 2020-12-13 02:42   作者:houjun