创建句柄时获取libhPlayerPluginManager.so库的绝对路径,然后调用system()函数启动1个进程,然后创建两个进程之间的管道,用于传输客户端进程与解码进程之间的通信,客户端这边创建1个线程,实时检测解码进程发送的消息信息,解码进程这边也创建1个线程,实时检测客户端发送的消息,解码进程在建立1条管道就收客户端发送的码流数据,消息信息通过管道传输时进行xml格式化,过了管道传输后在进行xml解析,传输水印信息时需要对’<’和‘>’符号进行转移,因为xml数据解析时会把这两个符号当成特殊字符,码流头过管道传输时要进行base64编码,去除中间的\0符号,解码进程收到后在进行base64解码。 设计说明
时间: 2024-04-18 14:32:43 浏览: 22
以下是关于设计的说明:
1 获取libhPlayerPlugin.so库的绝对路径:在程序中可以使用动态链接库的加载机制,通过指定库名来获取其绝对路径。可以使用dlopen函数加载libhPlayerPluginManager.so库,并使用dladdr函数获取库的绝对路径。
2. 调用system()函数启动一个进程:使用system函数可以执行给定的命令字符串以启动一个新的进程。可以构造一个命令字符串,其中包含要执行的解码进程可执行文件的路径和参数,然后调用system函数启动进程。
3. 创建两个进程之间的管道:在客户端进程和解码进程之间创建管道,以实现它们之间的通信。可以使用pipe函数创建一个匿名管道,并得到两个文件描述符,一个用于读取数据,另一个用于写入数据。
4. 创建线程进行实时检测消息信息:在客户端进程和解码进程中分别创建一个线程,用于实时检测对方发送的消息信息。可以使用线程库(如pthread)创建线程,并在线程函数中循环监听管道文件描述符上的数据。
5. 消息信息的传输与解析:在管道传输消息信息时,可以将消息以XML格式进行封装。发送方在发送消息之前将消息信息转换为XML格式,接收方在接收到消息后进行XML解析,以获取其中的信息。需要注意对特殊字符进行转义,如对'<'和'>'符号进行转义,以避免在XML解析时出现问题。
6. 码流头的传输与解码:在管道传输码流头时,可以使用Base64编码将其转换为字符串进行传输。发送方将码流头进行Base64编码后发送,接收方接收到后进行Base64解码,以获取原始的码流头数据。需要注意去除中间的'\0'符号,确保解码后得到正确的码流头数据。
以上是关于设计的一些说明,涉及到了动态链接库的加载、进程间通信的管道、线程的创建和消息的传输与解析。具体实现时,还需要根据具体的编程语言和平台来选择相应的函数和库,并进行适当的错误处理和异常处理。