Home Database Mysql Tutorial V4L2视频采集操作流程和接口说明

V4L2视频采集操作流程和接口说明

Jun 07, 2016 pm 03:13 PM
interface operate process video illustrate collection

seven407 http://blog.csdn.net/seven407/article/details/6401792 一般操作流程(视频设备): 1. 打开设备文件。 int fd=open(/dev/video0,O_RDWR); 2. 取得设备的capability,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等。VIDIOC_QUE

seven407

http://blog.csdn.net/seven407/article/details/6401792

一般操作流程(视频设备):

1. 打开设备文件。 int fd=open("/dev/video0",O_RDWR); 
2. 取得设备的capability,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability 
3. 选择视频输入,一个视频设备可以有多个视频输入。VIDIOC_S_INPUT,struct v4l2_input 
4. 设置视频的制式和帧格式,制式包括PAL,NTSC,帧的格式个包括宽度和高度等。 
VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format 
5. 向驱动申请帧缓冲,一般不超过5个。struct v4l2_requestbuffers 
6. 将申请到的帧缓冲映射到用户空间,这样就可以直接操作采集到的帧了,而不必去复制。mmap 
7. 将申请到的帧缓冲全部入队列,以便存放采集到的数据.VIDIOC_QBUF,struct v4l2_buffer 
8. 开始视频的采集。VIDIOC_STREAMON 
9. 出队列以取得已采集数据的帧缓冲,取得原始采集数据。VIDIOC_DQBUF 
10. 将缓冲重新入队列尾,这样可以循环采集。VIDIOC_QBUF 
11. 停止视频的采集。VIDIOC_STREAMOFF 
12. 关闭视频设备。close(fd);

常用的结构体(参见/usr/include/linux/videodev2.h):

struct v4l2_requestbuffers reqbufs;//向驱动申请帧缓冲的请求,里面包含申请的个数 
struct v4l2_capability cap;//这个设备的功能,比如是否是视频输入设备 
struct v4l2_input input; //视频输入 
struct v4l2_standard std;//视频的制式,比如PAL,NTSC 
struct v4l2_format fmt;//帧的格式,比如宽度,高度等

struct v4l2_buffer buf;//代表驱动中的一帧 
v4l2_std_id stdid;//视频制式,例如:V4L2_STD_PAL_B 
struct v4l2_queryctrl query;//某一类型的控制 
struct v4l2_control control;//具体控制的值

1。User controlls其实就是一些用户可以用来进行设置的一些属性,如视频中的brightness等,

video4linux就提取出了最常见的一些设 置,给他们分配了ID,这样大家对于这些常见的设置,

就是用这些ID就可以了,可以察看当前设备对该设置的值,也可以给该设置新值,此外,

由于某些设置包 含很多子设置项,因此就又有了menu的含义,即对于一个具体的control,

我们在列举他的属性时,发现其类型是包含了menu的,那么我们就可以以 这个control的id为参数,

察看其menu及各自的值。当然用户可以由自定义的control以及extended control。

好像是Camera Control ID中就有可以设置focus聚焦的control id,这个可以看一看。

2。Data format 应用是可以和device针对通信的数据进行谈判的,即可以设置device所使用的数据的格式,

可以获得设备所使用的数据的格式,也可以尝试一下某种格 式的数据设备是否支持。

使用 VIDIOC_G_FMT and VIDIOC_S_FMT ioctls,而VIDIOC_TRY_FMT 就是用来试一下某设置是否被设备支持,

而且只是 测试,并不会起作用。我们还是可以用VIDIOC_ENUM_FMT来列举设备所支持的所有的image的格式的。

关于数据格式,在video中就会涉及到image的格式,大小(宽度,高度),等信息。 
3. crapping和scaling 
就是把得到的数据作一定的剪裁,和伸缩,剪裁可以只取样我们可以得到的图像大小的一部分, 
剪裁的主要参数是位置和长度以及宽度,而scale的设置是通过VIDIOC_G_FMT and VIDIOC_S_FMT 来获得和 
设置当前的image的长度,宽度来实现的。看下图 

我们可以假设bounds是最大的能捕捉到的图像范围,defrect是我们的设备能够得到的最大的范围, 
这个可以通过VIDIOC_CROPCAP的ioctl来获得设备的crap相关的属性 v4l2_cropcap , 
其中的bounds就是这个bounds,其实就是上限。每个设备都有个默认的取样范围,就是defrect, 
就是default rect的意思,它比bounds要小一些。这个范围也是通过VIDIOC_CROPCAP的ioctl来 
获得的 v4l2_cropcap 结构中的defrect来表示的,我们可以通过 VIDIOC_G_CROP and VIDIOC_S_CROP 
来获取和设置设备当前的crop设置。

http://blog.mcuol.com/User/GuoHuiCao/Article/44253_1.htm

Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在 /dev目录下,完整路径的设备文件名为: /dev/video0 .

视频采集基本步骤流程如下: 打开视频设备,设置视频设备属性及采集方式、视频数据处理,关闭视频设备,如下图所示:


一、打开视频设备

打开视频设备非常简单,在V4L2中,视频设备被看做一个文件。使用open函数打开这个设备:

1. 用非阻塞模式打开摄像头设备 
int cameraFd; 
cameraFd = open("/dev/video0", O_RDWR | O_NONBLOCK); 

2. 如果用阻塞模式打开摄像头设备,上述代码变为: 
cameraFd = open("/dev/video0", O_RDWR);

关于阻塞模式和非阻塞模式

应用程序能够使用阻塞模式或非阻塞模式打开视频设备,如果使用非阻塞模式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存(DQBUFF)里的东西返回给应用程序。

二、Linux视频设备驱动常用控制命令使用说明

设置视频设备属性通过ioctl来进行设置,ioctl有三个参数,分别是fd, cmd,和parameter,表示设备描述符,控制命令和控制命令参数。

Linux 视频设备驱动接口V4L2支持的常用控制命令如下:

1. 控制命令 VIDIOC_ENUM_FMT

功能: 获取当前视频设备支持的视频格式 。

参数说明:参数类型为V4L2的视频格式描述符类型 struct v4l2_fmtdesc

返回值说明: 执行成功时,函数返回值为 0;struct v4l2_fmtdesc 结构体中的 .pixelformat和 .description 成员返回当前视频设备所支持的视频格式;

使用举例:

-------------------------------------------------------------------------------------------------

struct v4l2_fmtdesc fmt;

memset(&fmt, 0, sizeof(fmt));

fmt.index = 0;

fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

while ((ret = ioctl(dev, VIDIOC_ENUM_FMT, &fmt)) == 0) {

fmt.index++;

printf("{ pixelformat = ''%c%c%c%c'', description = ''%s'' }/n",

fmt.pixelformat & 0xFF, (fmt.pixelformat >> 8) & 0xFF,

(fmt.pixelformat >> 16) & 0xFF, (fmt.pixelformat >> 24) & 0xFF,

fmt.description);

}

---------------------------------------------------------------------------------------------------------------

2. 控制命令VIDIOC_QUERYCAP

功能: 查询视频设备的功能 ;

参数说明:参数类型为V4L2的能力描述类型struct v4l2_capability ;

返回值说明: 执行成功时,函数返回值为 0;函数执行成功后,struct v4l2_capability 结构体变量中的返回当前视频设备所支持的功能;例如支持视频捕获功能V4L2_CAP_VIDEO_CAPTURE、V4L2_CAP_STREAMING等。

使用举例:

-----------------------------------------------------------------------------------------------------------

struct v4l2_capability cap;

iret = ioctl(fd_usbcam, VIDIOC_QUERYCAP, &cap);

if(iret

{

printf("get vidieo capability error,error code: %d /n", errno);

return ;

}

----------------------------------------------------------------------------------------------------------

执行完VIDIOC_QUERYCAP命令后,cap变量中包含了该视频设备的能力信息,程序中通过检查cap中的设备能力信息来判断设备是否支持某项功能。

3. 控制命令VIDIOC_S_FMT

功能: 设置视频设备的视频数据格式,例如设置视频图像数据的长、宽,图像格式(JPEG、YUYV格式);

参数说明:参数类型为V4L2的视频数据格式类型 struct v4l2_format ;

返回值说明: 执行成功时,函数返回值为 0;

使用举例:

----------------------------------------------------------------------------------------------------------

struct v4l2_format tv4l2_format;

tv4l2_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

tv4l2_format.fmt.pix.width = img_width;

tv4l2_format.fmt.pix.height = img_height;

tv4l2_format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;

tv4l2_format.fmt.pix.field = V4L2_FIELD_INTERLACED;

iret = ioctl(fd_usbcam, VIDIOC_S_FMT, &tv4l2_format);

-----------------------------------------------------------------------------------------------------------

注意:如果该视频设备驱动不支持你所设定的图像格式,视频驱动会重新修改struct v4l2_format结构体变量的值为该视频设备所支持的图像格式,所以在程序设计中,设定完所有的视频格式后,要获取实际的视频格式,要重新读取struct v4l2_format结构体变量。

4. 控制命令VIDIOC_REQBUFS

功能: 请求V4L2驱动分配视频缓冲区(申请V4L2视频驱动分配内存),V4L2是视频设备的驱动层,位于内核空间,所以通过VIDIOC_REQBUFS控制命令字申请的内存位于内核空间,应用程序不能直接访问,需要通过调用mmap内存映射函数把内核空间内存映射到用户空间后,应用程序通过访问用户空间地址来访问内核空间。

参数说明:参数类型为V4L2的申请缓冲区数据结构体类型struct v4l2_requestbuffers ;

返回值说明: 执行成功时,函数返回值为 0;V4L2驱动层分配好了视频缓冲区;

使用举例:

-----------------------------------------------------------------------------------------------------------

struct v4l2_requestbuffers tV4L2_reqbuf;

memset(&tV4L2_reqbuf, 0, sizeof(struct v4l2_requestbuffers ));

tV4L2_reqbuf.count = 1; //申请缓冲区的个数

tV4L2_reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

tV4L2_reqbuf.memory = V4L2_MEMORY_MMAP;

iret = ioctl(fd_usbcam, VIDIOC_REQBUFS, &tV4L2_reqbuf);

--------------------------------------------------------------------------------------------------------------

注意:VIDIOC_REQBUFS会修改tV4L2_reqbuf的count值,tV4L2_reqbuf的count值返回实际申请成功的视频缓冲区数目;

5. 控制命令VIDIOC_QUERYBUF

功能: 查询已经分配的V4L2的视频缓冲区的相关信息,包括视频缓冲区的使用状态、在内核空间的偏移地址、缓冲区长度等。在应用程序设计中通过调VIDIOC_QUERYBUF来获取内核空间的视频缓冲区信息,然后调用函数mmap把内核空间地址映射到用户空间,这样应用程序才能够访问位于内核空间的视频缓冲区。

参数说明:参数类型为V4L2缓冲区数据结构类型 struct v4l2_buffer ;

返回值说明: 执行成功时,函数返回值为 0;struct v4l2_buffer结构体变量中保存了指令的缓冲区的相关信息;

一般情况下,应用程序中调用VIDIOC_QUERYBUF取得了内核缓冲区信息后,紧接着调用mmap函数把内核空间地址映射到用户空间,方便用户空间应用程序的访问。

使用举例:

----------------------------------------------------------------------------------------------------------------

struct v4l2_buffer tV4L2buf;

memset(&tV4L2buf, 0, sizeof(struct v4l2_buffer));

tV4L2buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

tV4L2buf.memory = V4L2_MEMORY_MMAP;

tV4L2buf.index = i; // 要获取内核视频缓冲区的信息编号

iret = ioctl(fd_usbcam, VIDIOC_QUERYBUF, &tV4L2buf);

// 把内核空间缓冲区映射到用户空间缓冲区

AppBufLength = tV4L2buf.length;

AppBufStartAddr = mmap(NULL /* start anywhere */ ,

tV4L2buf.length,

PROT_READ | PROT_WRITE /* access privilege */ ,

MAP_SHARED /* recommended */ ,

fd_usbcam, tV4L2buf.m.offset);

------------------------------------------------------------------------------------------------------------------

上述代码在通过调用VIDIOC_QUERYBUF取得内核空间的缓冲区信息后,接着调用mmap函数把内核空间缓冲区映射到用户空间;关于mmap函数的用法,请读者查询相关资料;

6. 控制命令VIDIOC_QBUF

功能: 投放一个空的视频缓冲区到视频缓冲区输入队列中 ;

参数说明:参数类型为V4L2缓冲区数据结构类型 struct v4l2_buffer ;

返回值说明: 执行成功时,函数返回值为 0;函数执行成功后,指令的视频缓冲区进入视频输入队列,在启动视频设备拍摄图像时,相应的视频数据被保存到视频输入队列相应的视频缓冲区中。

使用举例:

-------------------------------------------------------------------------------------------------------------

struct v4l2_buffer tV4L2buf;

memset(&tV4L2buf, 0, sizeof(struct v4l2_buffer));

tV4L2buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

tV4L2buf.memory = V4L2_MEMORY_MMAP;

tV4L2buf.index = i; //指令要投放到视频输入队列中的内核空间视频缓冲区的编号;

iret = ioctl(fd_usbcam, VIDIOC_QBUF, &tV4L2buf);

----------------------------------------------------------------------------------------------------------

7. 控制命令VIDIOC_STREAMON

功能: 启动视频采集命令,应用程序调用VIDIOC_STREAMON启动视频采集命令后,视频设备驱动程序开始采集视频数据,并把采集到的视频数据保存到视频驱动的视频缓冲区中。

参数说明:参数类型为V4L2的视频缓冲区类型 enum v4l2_buf_type ;

返回值说明: 执行成功时,函数返回值为 0;函数执行成功后,视频设备驱动程序开始采集视频数据,此时应用程序一般通过调用select函数来判断一帧视频数据是否采集完成,当视频设备驱动完成一帧视频数据采集并保存到视频缓冲区中时,select函数返回,应用程序接着可以读取视频数据;否则select函数阻塞直到视频数据采集完成。Select函数的使用请读者参考相关资料。

使用举例:

----------------------------------------------------------------------------------------------------------

enum v4l2_buf_type v4l2type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

fd_set fds ;

struct timeval tv;

iret = ioctl(fd_usbcam, VIDIOC_STREAMON, &v4l2type);

FD_ZERO(&fds);

FD_SET(fd_usbcam, &fds);

tv.tv_sec = 2; /* Timeout. */

tv.tv_usec = 0;

iret = select(fd_usbcam+ 1, &fds, NULL, NULL, &tv);

----------------------------------------------------------------------------------------------------------

8. 控制命令VIDIOC_DQBUF

功能: 从视频缓冲区的输出队列中取得一个已经保存有一帧视频数据的视频缓冲区;

参数说明:参数类型为V4L2缓冲区数据结构类型 struct v4l2_buffer ;

返回值说明: 执行成功时,函数返回值为 0;函数执行成功后,相应的内核视频缓冲区中保存有当前拍摄到的视频数据,应用程序可以通过访问用户空间来读取该视频数据。(前面已经通过调用函数mmap做了用户空间和内核空间的内存映射).

使用举例:

----------------------------------------------------------------------------------------------------------

struct v4l2_buffer tV4L2buf;

memset(&tV4L2buf, 0, sizeof(struct v4l2_buffer));

tV4L2buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

tV4L2buf.memory = V4L2_MEMORY_MMAP;

iret = ioctl(fd_usbcam, VIDIOC_DQBUF, &tV4L2buf);

----------------------------------------------------------------------------------------------------------

9. 控制命令VIDIOC_STREAMOFF

功能: 停止视频采集命令,应用程序调用VIDIOC_ STREAMOFF停止视频采集命令后,视频设备驱动程序不在采集视频数据。

参数说明:参数类型为V4L2的视频缓冲区类型 enum v4l2_buf_type ;

返回值说明: 执行成功时,函数返回值为 0;函数执行成功后,视频设备停止采集视频数据。

使用举例:

----------------------------------------------------------------------------------------------------------

enum v4l2_buf_type v4l2type;

v4l2type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

iret = ioctl(fd_usbcam, VIDIOC_STREAMOFF, &v4l2type);

-----------------------------------------------------------------------------------------------------------

以上就是Linux 视频设备驱动V4L2最常用的控制命令使用说明,通过使用以上控制命令,可以完成一幅视频数据的采集过程。V4L2更多的控制命令使用说明请参考:http://v4l2spec.bytesex.org/spec/book1.htm

希望本文对大家理解linux下的视频驱动编程有所帮助。

---------------------------------------------------------------------------------------------------------------------

作者: 曹国辉 南京凌嵌教育嵌入式Linux金牌讲师

QQ: 1539730715 欢迎嵌入式Linux爱好者一起交流。

凌嵌教育科技是江苏地区权威的嵌入式linxu培训专家、专业代理飞凌、优龙嵌入式ARM开发板。网址:http://www.jslinux.com

2010-11.14日

版权申明:本文版权归作者所有, 未经允许不得用于商业目的。

http://www.jslinux.com

Powered by Zoundry Raven

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1664
14
PHP Tutorial
1269
29
C# Tutorial
1248
24
Is it infringing to post other people's videos on Douyin? How does it edit videos without infringement? Is it infringing to post other people's videos on Douyin? How does it edit videos without infringement? Mar 21, 2024 pm 05:57 PM

With the rise of short video platforms, Douyin has become an indispensable part of everyone's daily life. On TikTok, we can see interesting videos from all over the world. Some people like to post other people’s videos, which raises a question: Is Douyin infringing upon posting other people’s videos? This article will discuss this issue and tell you how to edit videos without infringement and how to avoid infringement issues. 1. Is it infringing upon Douyin’s posting of other people’s videos? According to the provisions of my country's Copyright Law, unauthorized use of the copyright owner's works without the permission of the copyright owner is an infringement. Therefore, posting other people’s videos on Douyin without the permission of the original author or copyright owner is an infringement. 2. How to edit a video without infringement? 1. Use of public domain or licensed content: Public

How to publish Xiaohongshu video works? What should I pay attention to when posting videos? How to publish Xiaohongshu video works? What should I pay attention to when posting videos? Mar 23, 2024 pm 08:50 PM

With the rise of short video platforms, Xiaohongshu has become a platform for many people to share their lives, express themselves, and gain traffic. On this platform, publishing video works is a very popular way of interaction. So, how to publish Xiaohongshu video works? 1. How to publish Xiaohongshu video works? First, make sure you have a video content ready to share. You can use your mobile phone or other camera equipment to shoot, but you need to pay attention to the image quality and sound clarity. 2. Edit the video: In order to make the work more attractive, you can edit the video. You can use professional video editing software, such as Douyin, Kuaishou, etc., to add filters, music, subtitles and other elements. 3. Choose a cover: The cover is the key to attracting users to click. Choose a clear and interesting picture as the cover to attract users to click on it.

How to make money from posting videos on Douyin? How can a newbie make money on Douyin? How to make money from posting videos on Douyin? How can a newbie make money on Douyin? Mar 21, 2024 pm 08:17 PM

Douyin, the national short video platform, not only allows us to enjoy a variety of interesting and novel short videos in our free time, but also gives us a stage to show ourselves and realize our values. So, how to make money by posting videos on Douyin? This article will answer this question in detail and help you make more money on TikTok. 1. How to make money from posting videos on Douyin? After posting a video and gaining a certain amount of views on Douyin, you will have the opportunity to participate in the advertising sharing plan. This income method is one of the most familiar to Douyin users and is also the main source of income for many creators. Douyin decides whether to provide advertising sharing opportunities based on various factors such as account weight, video content, and audience feedback. The TikTok platform allows viewers to support their favorite creators by sending gifts,

How to post videos on Weibo without compressing the image quality_How to post videos on Weibo without compressing the image quality How to post videos on Weibo without compressing the image quality_How to post videos on Weibo without compressing the image quality Mar 30, 2024 pm 12:26 PM

1. First open Weibo on your mobile phone and click [Me] in the lower right corner (as shown in the picture). 2. Then click [Gear] in the upper right corner to open settings (as shown in the picture). 3. Then find and open [General Settings] (as shown in the picture). 4. Then enter the [Video Follow] option (as shown in the picture). 5. Then open the [Video Upload Resolution] setting (as shown in the picture). 6. Finally, select [Original Image Quality] to avoid compression (as shown in the picture).

Douyin 15 seconds is too short and I want to extend it. How can I extend it? How to make a video longer than 15 seconds? Douyin 15 seconds is too short and I want to extend it. How can I extend it? How to make a video longer than 15 seconds? Mar 22, 2024 pm 08:11 PM

With the popularity of Douyin, more and more people like to share their lives, talents and creativity on this platform. Douyin's 15-second limit makes many users feel that it is not enjoyable enough and hope to extend the video duration. So, how can you extend the video duration on Douyin? 1. Douyin 15 seconds is too short and I want to extend it. How can I extend it? 1. The most convenient way to shoot multiple videos and splice them is to record multiple 15-second videos, and then use the editing function of Douyin to combine them. When recording, make sure to leave some blank space at the beginning and end of each video for later splicing. The length of the spliced ​​video can be several minutes, but this may cause the video screen to switch too frequently, affecting the viewing experience. 2. Use Douyin special effects and stickers Douyin provides a series of special effects

In addition to CNN, Transformer, and Uniformer, we finally have more efficient video understanding technology In addition to CNN, Transformer, and Uniformer, we finally have more efficient video understanding technology Mar 25, 2024 am 09:16 AM

The core goal of video understanding is to accurately understand spatiotemporal representation, but it faces two main challenges: there is a large amount of spatiotemporal redundancy in short video clips, and complex spatiotemporal dependencies. Three-dimensional convolutional neural networks (CNN) and video transformers have performed well in solving one of these challenges, but they have certain shortcomings in addressing both challenges simultaneously. UniFormer attempts to combine the advantages of both approaches, but encounters difficulties in modeling long videos. The emergence of low-cost solutions such as S4, RWKV and RetNet in the field of natural language processing has opened up new avenues for visual models. Mamba stands out with its Selective State Space Model (SSM), which enables long-term dynamics while maintaining linear complexity.

How to open multiple Toutiao accounts? What is the process for applying for a Toutiao account? How to open multiple Toutiao accounts? What is the process for applying for a Toutiao account? Mar 22, 2024 am 11:00 AM

With the popularity of mobile Internet, Toutiao has become one of the most popular news information platforms in my country. Many users hope to have multiple accounts on the Toutiao platform to meet different needs. So, how to open multiple Toutiao accounts? This article will introduce in detail the method and application process of opening multiple Toutiao accounts. 1. How to open multiple Toutiao accounts? The method of opening multiple Toutiao accounts is as follows: On the Toutiao platform, users can register accounts through different mobile phone numbers. Each mobile phone number can only register one Toutiao account, which means that users can use multiple mobile phone numbers to register multiple accounts. 2. Email registration: Use different email addresses to register a Toutiao account. Similar to mobile phone number registration, each email address can also register a Toutiao account. 3. Log in with third-party account

Huawei Mate60 Pro screenshot operation steps sharing Huawei Mate60 Pro screenshot operation steps sharing Mar 23, 2024 am 11:15 AM

With the popularity of smartphones, the screenshot function has become one of the essential skills for daily use of mobile phones. As one of Huawei's flagship mobile phones, Huawei Mate60Pro's screenshot function has naturally attracted much attention from users. Today, we will share the screenshot operation steps of Huawei Mate60Pro mobile phone, so that everyone can take screenshots more conveniently. First of all, Huawei Mate60Pro mobile phone provides a variety of screenshot methods, and you can choose the method that suits you according to your personal habits. The following is a detailed introduction to several commonly used interceptions:

See all articles