mplayer slave 模式文档

本文深入探讨了MPlayer的slave模式,包括其工作原理、如何启动slave模式下的MPlayer,以及各种命令的使用方法和注意事项。重点介绍了如何通过slave模式实现与MPlayer的交互,获取视频播放信息,以及在不同场景下的应用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

slave模式协议
-------------------

关于slave模式,MPlayer为后台运行其他程序。不再截获键盘事件,MPlayer会从标准输入读一个换行符(/n)分隔开的命令。

要动手尝试slave模式,运行

 

  mplayer -slave -quiet <movie>

 

并在控制台窗口输入slave命令。

您也可以使用一个fifo文件(命名管道):

  mkfifo /tmp/fifofile
  mplayer -slave -input file=/tmp/fifofile <movie>

大多数slave模式命令相当于命令行选项,但并非一定要在相同的名称。详细说明中可以在手册中找到


所有命令都可以以“pausing”,“pausing_keep”,或“pausing_toggle”为前缀。“pausing”告诉MPlayer暂停正在处理的命令。 “pausing_keep”告诉MPlayer暂停保持只要它已在暂停模式。“pausing_toggle”告诉MPlayer暂停保持只要它尚未暂停模式。请注意,“尽可能“可以在命令完全执行之前。
作为一项临时黑客,也有个实验性“pausing_keep_force”前缀,与之MPlayer不退出了所有的暂停循环。
这样你能避免“frame stepping”由于“pausing_keep”的影响。但大多数命令将要么不执行或是按照令人意外的方式。
对于“set_mouse_pos”和“key_down_event”,“pausing_keep_force”是默认
因为其他值不为他们作出多大的意义。


各种提示和技巧(帮助扩展!):

- 尝试使用例如
    pausing_keep_force pt_step 1
    get_property pause
  切换到下一个文件。它避免在转换到新的音频文件之前旧文件播放一小段时间


可用的命令('mplayer -input cmdlist的'会打印出一份清单):

 

注意,因为Mplayer是通过换行符("/n")来分隔不同的命令,所以我们在编程中不管是写入到管道文件还是写入到QT的进程中在命令后面一定要加入换行符("/n"),这样Mplayer才能辨别。

还有一点我们要通过给Mplayer发送多个命令来获取到当前视频播放的信息,如何来获取到这些信息呢?

在我们通过管道或进程的标准输入通道给Mplayer发送命令,如“get_video_resolution”(注意是下划线),Mplayer就会响应,会在标准输出中输出视频的分辨率如:ANS_VIDEO_RESOLUTION='352x288',所以为了获得影片的分辨率,我们还需要将获取到的信息进行解析,取到352x288.其他的信息获取方法也是差不多的。


alt_src_step <value> (ASX playlist only)
    当有一个以上的源可以有选择下一个/前一个。

 

audio_delay <value> [abs]
    设置/调整音频延迟。
    如果[abs]不提供或为零,调整迟延<value>秒。
    如果[abs]不为零,将延迟到<value>秒。

 

[brightness|contrast|gamma|hue|saturation] <value> [abs]
    设置/调整视频参数。
    如果[abs]不提供或为零,修改参数为<value>。
    如果[abs]不为零,参数设置为<value>。
    <value>的范围是[-100,100]。

 

change_rectangle <val1> <val2>
    更改矩形滤波器矩形的坐标。
        <val1>
            必须是下列之一:
                0 =宽度
                1 =高度
                2 = x坐标
                3 = y坐标
        <val2>
            如果<val1>为0或1:
                整数加/减去宽/高。
                正值宽度/高度和负值减去它。
            如果<val1>是2或3:
                相对矩形左上角的整数值。正值移动矩形向右/向下和负值移动矩形向左/向上。

 

dvb_set_channel <channel_number> <card_number>
    设置的DVB通道。

 

dvdnav <button_name>
     给定dvdnav按钮。
        up
        down
        left
        right
        menu
        select
        prev
        mouse


edl_mark
    将当前位置写入EDL文件。

 

frame_drop [value]
    切换/设置帧的模式。

 

get_audio_bitrate
    打印出当前文件音频比特率。

 

get_audio_codec
    打印出的音频当前文件的编解码器的名称。

 

get_audio_samples
    打印出的音频和当前文件的声道数。

 

get_file_name
    打印出当前文件名。

 

get_meta_album
    打印出当前文件的'专辑'的元数据。

 

get_meta_artist
    打印出当前文件的'艺术家'的元数据。

 

get_meta_comment
    打印出当前文件的'评论'的元数据。

 

get_meta_genre
    打印出当前文件的'流派'的元数据。

 

get_meta_title
    打印出当前文件的'标题'的元数据。

 

get_meta_track
    打印出当前文件的'音轨的数量'的元数据。

 

get_meta_year
    打印出当前文件的'年份'的元数据。

 

get_percent_pos
    打印出文件中的当前位置为整数百分比[0-100)。

 

get_property <property>
    打印出的属性的当前值。

 

get_sub_visibility
    打印出字幕能见度(1 ==开启,0 ==关闭)。

 

get_time_length
    打印出当前文件的长度用秒表示。

 

get_time_pos
    打印出在文件的当前位置用秒表示,采用浮点数。

 

get_vo_fullscreen
    全屏状态打印出来(1 == 全屏,0 ==窗口)。

 

get_video_bitrate
    打印出当前文件的视频比特率。

 

get_video_codec
    打印出当前视频文件的编解码器的名称。

 

get_video_resolution
    打印出当前文件的视频分辨率。

 

screenshot <value>
    截屏。要求屏幕过滤器加载。
        0以一个单独的截图。
        1启动/停止服用,每帧画面。

 

gui_[about|loadfile|loadsubtitle|play|playlist|preferences|skinbrowser|stop]
    图形用户界面行动

 

key_down_event <value>
    注入<value>到MPlayer的关键代码的事件。

 

loadfile <file|url> <append>
    加载给定的文件/网址,停止当前文件的播放/网址。
    如果是<append>非零继续播放和文件/网址
    追加到当前播放列表代替。

 

loadlist <file> <append>
    加载给定的播放列表文件,停止当前文件的播放。
    如果<append>是非零和继续播放文件,文件追加到当前播放列表。

 

loop <value> [abs]
    调整/设置怎样的电影应该是循环多次。 -1代表不循环,永远的0。

菜单命令>
    执行上显示OSD菜单命令。
        up 移动光标向上。
        down 移动光标向下。
        ok 接受的选择。
        cancel 取消选择。
        hide 隐藏的OSD菜单。

 

set_menu <menu_name>
    显示菜单命名<menu_name>。

 

mute [value]
    切换声音输出静音或将其设置为[value](value>=0)
    (1 ==开启,0 ==关闭)。

 

osd [level]
    切换OSD模式或将其设置为[level]在[level]>= 0。

 

osd_show_property_text <string> [duration] [level]
    显示一项关于OSD扩展属性的字符串,看到-playing-msg 用于描述可用的扩展。如果[duration]>=0,显示为[duration]ms。 [level]设置所需的最低水平OSD该消息可见(默认是:0 -始终显示)。

 

osd_show_text <string> [duration] [level]
    查看OSD的<string>。

 

panscan <-1.0 - 1.0> | <0.0 - 1.0> <abs>
    增加或减少pan-and-scan的<value>的范围,1.0是最高的。
    负值降低pan-and-scan范围。
    如果<abs>!= 0,那么pan-and-scan范围被解释为绝对的范围。

 

pause
    暂停/取消暂停播放。

 

frame_step
    播放一帧,然后暂停。

 

pt_step <value> [force]
    转到下一个/上的播放树项。标志的<value>讲述
    该方向。如果没有项目可在给定的方向不会做任何事,除非[force]不为零。

 

pt_up_step <value>[force]
    类似pt_step,但跳转到下一个/父列表中的前一个项目。
    有助于摆脱在播放树内部循环。

 

quit [value]
    退出MPlayer。可选的整数[value]的值作为返回代码
    为mplayer的进程(默认值:0)。

 

radio_set_channel <channel>
    切换到<channel>。在‘channel’的广播参数需要设置。

 

radio_set_freq <frequency in MHz>
    设置广播频率调谐器。

 

radio_step_channel <-1|1>
    步向前(1)或向后(-1频道列表)。只有当'channel'的广播参数设置。

 

radio_step_freq <value>
    调整频率的<value>(正数 - 向上,负数 - 向下)。

 

seek <value> [type]
    定位电影的某些地方。
        0 是一个相对定位+/- <value>(默认值)。
        1 是定位<value>%在电影里。
        2 是寻求一个绝对位置的<value>秒。

 

seek_chapter <value> [type]
    定位一章的开始。
        0 是一个相对寻求+/- <value>章节(默认)。
        1 定位到<value>章。

 

switch_angle <value>
    转换ID为角度[value]。通过循环如果用角度[value]省略或负数。

 

set_mouse_pos<X> <y>
    告诉MPlayer的窗口中鼠标坐标。
    此命令不移动鼠标!

 

set_property <property> <value>
    设置属性。

 

speed_incr <value>
    增加<value>当前回放速度。

 

speed_mult <value>
    目前速度乘以<value>。

 

speed_set <value>
    设定速度为<value>。

 

step_property <property> [value] [direction]
    通过value来改变属性,或者,如果没给定或为0则增加默认值。如果小于零,方向是相反的方向。

 

stop
    停止播放。

 

sub_alignment [value]
    切换/设置对齐字幕。
        0 顶部对齐
        1 居中对齐
        2 底部对齐

 

sub_delay <value> [abs]
    调整了字幕延迟+/- <value>秒或将其设置<value>
    秒时[abs]不为零。

 

sub_load <subtitle_file>
    从<subtitle_file>加载字幕。

 

sub_log
    当前日志上显示的字幕或连同文件名和时间信息的〜/.mplayer/subtitle_log。

 

sub_pos <value> [abs]
    调整/设置字幕的位置。

 

sub_remove [value]
    如果[value]参数是当前和非负,并取消了字幕文件的[value]索引。如果参数省略或负,除去
    所有的字幕文件。

sub_select [value]
    显示字幕的索引[value]。关闭字幕显示,如果关闭[value]的值为-1或比更高可用的字幕指数更大。
    可用的字幕周期,如果[value]省略或低于-1。支持字幕来源是 -sub 选项在命令行,VOBsubs,DVD字幕和Ogg和Matroska文本流。
    这主要是循环所有字幕命令,如果要设置一个特定的字幕,使用sub_file,sub_vob,或sub_demux。

sub_source [source]
    显示第一个字幕,从[source]。这里[source]是一个整数:
    SUB_SOURCE_SUBS(0)用于文件字幕
    SUB_SOURCE_VOBSUB(1) VOBSub文件
    SUB_SOURCE_DEMUX(2)在媒体文件或DVD嵌入字幕。
    如果[source]为-1,将关闭字幕显示。如果[source]低于-1,将循环每个之间的现有资源第一个字幕。

sub_file [value]
    显示字幕specifid由[value]的文件subs。在[value]的值
    通过相应的ID_FILE_SUB_ID'-identify'报告的值。
    如果[value]的值-1,将关闭字幕显示。如果[value]小于-1,
    将循环的所有文件subs。

sub_vob [value]
    显示字幕specifid由[value]的vobsubs。在[value]的值
    通过相应的ID_VOBSUB_ID'-identify'报告的值。
    如果[value]的值-1,将关闭字幕显示。如果[value]小于-1,
    将循环的所有vobsubs。

sub_demux [value]
    显示字幕specifid由[value]从DVD字幕或嵌入在媒体文件。在[value]的值对应ID_SUBTITLE_ID值'-identify',。如果[value]的值-1,将关闭字幕显示。
    如果[value]小于-1,将循环所有的DVD字幕或嵌入字幕。

sub_scale <value> [abs]
    调整字幕大小+/- <value>或将其设置为<value>时,[abs]
    不为零。

vobsub_lang
    这是与sub_select为了向后兼容。

sub_step<value>
    在字幕列表前进<value>步,如果<value>
    是为负,倒退<value>步。

sub_visibility [value]
    切换/设置字幕。

forced_subs_only [value]
    强制切换/设置字幕。

switch_audio [value](目前的MPEG*,AVI,的Matroska和libav库处理流)
    切换到音频文件通过ID[value]。循环
    歌曲,如果[value]省略或负数。

switch_angle [value](DVD光盘只)
    切换到DVD的角度通过ID[value]。循环
    如果可用角度,如果[value]省略或负数。

switch_ratio [value]
    在运行时改变长宽比。 [value]是表示新的长宽比
    作为浮动16 / 9(例如1.77778)。
    这可能与某些视频过滤器的问题。

switch_title [value](DVDNAV only)
    切换到DVD标题通过ID[value]。循环可用标题,如果[value]的值省略或负数。

switch_vsync [value]
    切换场同步(1 ==开启,0 ==关闭)。如果[value]的值没有提供,刷新同步状态反转。

teletext_add_digit <value>
    进入/离开字幕的页面号编辑模式,并追加提供的以前输入的数字。
    0 .. 9 - 附加apropriate数字。 (启用编辑模式,如果从一般要求模式,并切换到正常模式时。)
      -     - 删除最后的页码数字。 (退格仿真,只能在页码编辑模式。)

teletext_go_link <1-6>
    按照目前的字幕的页面给出链接。

tv_start_scan
    电视频道开始自动扫描。

tv_step_channel <channel>
    选择下一个/上一个电视频道。

tv_step_norm
    更改电视制式。

tv_step_chanlist
    改变频道列表。

tv_set_channel <channel>
    设置当前的电视频道。

tv_last_channel
    设置当前电视频道到最后一个。

tv_set_freq <frequency in MHz>
    设置电视调谐器的频率。

tv_step_freq <frequency offset in MHz>
    设置电视调谐器的频率相对于当前值。

tv_set_norm <norm>
    电视调谐器设置规范(包括PAL,SECAM,NTSC制式,...).

tv_set_brightness <-100 - 100> [abs]
    设置电视调谐器的亮度或调整,如[abs]设置为0。

tv_set_contrast <-100 -100> [abs]
    设置电视调谐器的对比或调整,如[abs]设置为0。

tv_set_hue <-100 - 100> [abs]
    设置电视调谐器色调或调整,如[abs]设置为0。

tv_set_saturation <-100 - 100> [abs]
    设置电视调谐器饱和或调整,如[abs]设置为0。

use_master
    主之间切换和PCM音量控制。

vo_border [value]
    切换/设置边界显示。

vo_fullscreen [value]
    切换/设置全屏模式。

vo_ontop [value]
    切换/设置保持在最上层。

vo_rootwin [value]
    切换/设置在根窗口播放。

volume <value> [abs]
    增大/减小音量,或将其设置为<value>,如果[abs]不为零。


下面的命令,实际上只可用于OSD菜单控制台模式:

help
    帮助文本显示,目前还是空的。

exit
    从OSD菜单退出控制台。不像'quit',不退出MPlayer的。

hide
    隐藏了OSD菜单控制台。点击菜单命令unhides它。其他按键绑定的行为一切如常。

run <value>
    运行<value>的shell命令。在OSD菜单控制台模式标准输出和标准输入
    是通过视频输出。

 


<think>我们正在讨论MPlayerslave模式。在slave模式下,MPlayer会从标准输入(stdin)读取命令,而不是直接接收键盘输入。这允许其他程序(如脚本或前端)控制MPlayer。 用户的问题:如何在MPlayerslave模式下选择并播放指定的音视频文件? 步骤: 1. 启动MPlayer进入slave模式,通常使用`-slave`选项。 2. 通过标准输入发送命令来控制MPlayer。 播放指定文件的基本命令是: mplayer -slave -idle somefile.avi 但是,用户希望选择并播放特定的音视频文件,这意味着可能需要动态地切换文件。 在slave模式下,我们可以使用`loadfile`命令来加载并播放一个文件。命令格式为: loadfile <filename> 另外,如果用户需要选择特定的音轨或视频轨,可以使用以下命令: set_property <property> <value> 例如,设置音频轨道:`set_property aid <id>`,设置视频轨道:`set_property vid <id>`。 但是,请注意,在播放文件之前,我们可能不知道有哪些轨道可用。因此,通常的做法是先加载文件,然后根据需要切换轨道。 具体步骤: 1. 启动MPlayer进入slave模式,可以加上`-idle`选项,这样MPlayer在没有播放文件时会等待命令。 命令:`mplayer -slave -idle` 2. 然后,我们可以通过标准输入发送命令: loadfile "path/to/file" 3. 如果文件包含多个音轨或视频轨,我们可以使用`get_property`命令来获取轨道信息(例如,音频轨道列表),然后选择其中一个。 但是,获取轨道信息需要MPlayer在播放文件后,并且MPlayer会输出一些信息,我们需要解析这些信息。 然而,在slave模式下,MPlayer的输出(包括属性信息)是输出到标准输出的,因此我们需要读取并解析标准输出来获取轨道信息。 由于用户的问题只是关于命令,我们假设用户已经知道要选择的轨道ID。 因此,一个简单的流程是: - 启动MPlayer:`mplayer -slave -idle` - 发送:`loadfile "filename"` 加载文件 - 然后,如果需要选择音频轨道:`set_property aid <id>` - 同样,选择视频轨道:`set_property vid <id>` 但是,注意:轨道ID在文件加载后才会知道。所以,我们可以在加载文件后,等待MPlayer输出轨道信息,然后根据信息发送选择轨道的命令。 然而,用户并没有说明是事先知道轨道ID还是需要动态选择。我们假设用户希望指定轨道ID。 另外,我们也可以使用MPlayer的命令行参数在启动时指定轨道: -aid <id> 选择音频轨道 -vid <id> 选择视频轨道 例如:`mplayer -slave -aid 2 -vid 1 filename` 但是,如果用户希望在播放过程中切换文件,那么就需要在slave模式下使用`loadfile`命令。 总结: 1. 启动MPlayer进入slave模式并等待命令: mplayer -slave -idle 2. 然后,通过标准输入发送: loadfile "path/to/file" 3. 如果需要选择轨道,在加载文件后(可能需要等待一段时间,直到文件信息被解析)发送: set_property aid <id> set_property vid <id> 注意:在加载文件后,MPlayer会开始播放。如果需要在加载文件时就指定轨道,可以在加载文件前设置属性吗?实际上,在加载文件前设置属性是没有意义的,因为属性是针对当前播放的文件的。 所以,我们可以在加载文件后,立即设置属性(轨道选择)。但是,由于加载文件后需要一点时间初始化,可能设置属性的命令不能立即生效。因此,通常的做法是等待文件加载完成(比如等待MPlayer输出“Starting playback”之类的信息)再发送设置命令。 然而,MPlayerslave模式下输出信息到标准输出,我们需要读取并解析这些信息来确定文件是否已经加载完成。这通常需要外部程序(如脚本)来完成。 如果用户只是想要一个命令来启动并播放指定文件并选择轨道,那么可以在启动时指定文件以及轨道,而不使用slave模式下的命令。但是,用户要求的是在slave模式下。 因此,我们提供两种方式: 方式一:启动时指定文件和轨道(非slave模式命令,但可以用于一次性播放): mplayer -aid 2 -vid 1 "path/to/file" 方式二:在slave模式下动态控制(适用于需要连续控制的情况): # 启动MPlayer mplayer -slave -idle # 然后,发送命令(通过另一个终端或者管道): echo 'loadfile "path/to/file"' > /path/to/mplayer_stdin # 等待一段时间,让文件加载 sleep 1 echo 'set_property aid 2' > /path/to/mplayer_stdin echo 'set_property vid 1' > /path/to/mplayer_stdin 但是,注意:在slave模式下,MPlayer的标准输入是一个管道(pipe),我们需要将命令写入这个管道。具体实现取决于用户如何控制MPlayer(例如,通过脚本)。 根据用户的问题,他可能希望知道在slave模式下如何发送命令来播放指定文件并选择轨道。因此,我们重点说明slave模式下的命令序列。 另外,用户可能还需要知道如何获取轨道信息。在slave模式下,我们可以使用`get_property`命令来获取属性,比如: get_property aid get_property vid get_property audio_tracks get_property video_tracks 但是,获取属性后,MPlayer会在标准输出中返回结果,我们需要解析这些输出。 由于用户的问题只要求命令,我们给出基本命令。 因此,回答如下: 在MPlayerslave模式下,选择并播放指定音视频文件的命令序列如下: 1. 启动MPlayer进入slave模式并等待命令: mplayer -slave -idle 2. 通过标准输入发送命令(例如,通过管道或重定向): loadfile "文件路径" # 如果需要选择轨道,可以发送: set_property aid <音频轨道ID> set_property vid <视频轨道ID> 注意:轨道ID通常从0开始,但具体文件可能不同。可以使用`get_property`命令来获取当前文件的轨道信息。 例如: get_property audio_tracks # 获取可用的音频轨道列表 get_property video_tracks # 获取可用的视频轨道列表 然后根据返回的信息选择轨道ID。 但是,由于在slave模式下,MPlayer的输出是混合在标准输出中的,我们需要解析这些输出。例如,发送`get_property audio_tracks`后,MPlayer会输出类似: ANS_audio_tracks=0,1,2 这样,我们就可以知道有0,1,2三个音频轨道。 因此,完整的流程需要编写脚本来解析输出并发送命令。 如果用户只需要播放一个文件并选择轨道,也可以在启动命令中指定: mplayer -slave "文件路径" -aid <音频轨道ID> -vid <视频轨道ID> 这样,MPlayer启动后就会播放该文件并选择指定的轨道。然后,用户还可以继续发送其他命令(因为是在slave模式下)。 所以,如果用户已经知道轨道ID,那么启动时指定轨道可能是更简单的方式。 综上所述,用户可以根据自己的需求选择在启动时指定轨道,或者在播放过程中使用`set_property`命令。 引用[1]中提供了一个x264编码的命令行示例,但与我们讨论的MPlayer无关,因此我们忽略它。 现在,我们生成相关问题。</think>### MPlayer Slave 模式下选择并播放指定音视频文件的命令指南 在 MPlayerslave 模式下,您需要通过标准输入(stdin)发送控制命令来操作播放器。以下是完整操作流程: #### 1. **启动 MPlayer 进入 Slave 模式** ```bash mplayer -slave -idle -quiet ``` - `-slave`:启用 slave 模式 - `-idle`:空闲时等待命令 - `-quiet`:减少控制台输出(可选) #### 2. **通过标准输入发送控制命令** 使用管道或重定向发送命令序列: ```bash echo -e 'loadfile "video.mp4"\nset_property aid 1\nset_property vid 0' > /proc/$(pidof mplayer)/fd/0 ``` **命令详解**: 1. `loadfile "video.mp4"`:加载并播放指定文件(支持绝对/相对路径) 2. `set_property aid 1`:选择音频轨道 ID=1 3. `set_property vid 0`:选择视频轨道 ID=0 #### 3. **关键操作命令** | 命令 | 功能 | 示例 | |------|------|------| | `loadfile <文件路径>` | 加载新文件 | `loadfile "/media/movie.mkv"` | | `set_property aid <ID>` | 切换音频轨 | `set_property aid 2` | | `set_property vid <ID>` | 切换视频轨 | `set_property vid 1` | | `get_property aid` | 获取当前音频ID | 返回 `ANS_aid=1` | | `get_property track_list` | 列出所有轨道 | 返回轨道ID和语言 | | `pause` | 暂停/继续 | - | | `quit` | 退出播放器 | - | #### 4. **自动化脚本示例** ```bash #!/bin/bash # 启动MPlayer后台进程 mplayer -slave -idle -quiet >/dev/null 2>&1 & MP_PID=$! # 发送控制命令 sleep 1 # 等待初始化 echo 'loadfile "input.mkv"' > /proc/$MP_PID/fd/0 echo 'set_property aid 2' > /proc/$MP_PID/fd/0 # 播放30秒后退出 sleep 30 echo 'quit' > /proc/$MP_PID/fd/0 ``` #### 5. **轨道选择技巧** 1. 先获取轨道列表: ```bash echo get_property track_list > /proc/$MP_PID/fd/0 ``` 2. 解析返回结果(示例输出): ``` ANS_track_list='0|video|h264|1280x720|10.0|0 1|audio|aac|2ch|44100Hz|English 2|audio|ac3|5.1ch|48000Hz|Japanese' ``` 3. 根据ID选择所需音轨/字幕轨 #### 注意事项: 1. 文件路径含空格时需用双引号包裹:`loadfile "file with spaces.avi"` 2. 轨道ID从0开始计数,通常: - 视频轨:ID 0 - 音频轨:ID 1+ - 字幕轨:ID 128+ 3. 使用`>/proc/$PID/fd/0`需确保有权限访问进程 4. 备选方案:通过命名管道(named pipe)通信更稳定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值