opencodec github
时间: 2023-11-08 16:50:18 浏览: 36
Opencodec 是一个开源的视频编解码器,可以实现视频的压缩和解压缩。它的代码托管在 GitHub 上,你可以在这里找到它的仓库:https://github.com/nihui/Opencodec。这个仓库包含了 Opencodec 的源代码、文档和示例。如果你想了解 Opencodec 的详细信息,可以阅读仓库中的 README 文件。
相关问题
(GCC) PS G:\python\github\GCC-master> python end2end.py --config_env configs/env.yml --config_exp configs/end2end/end2end_cifar10.yml Traceback (most recent call last): File "end2end.py", line 181, in <module> main() File "end2end.py", line 37, in main p = create_config(args.config_env, args.config_exp) File "G:\python\github\GCC-master\utils\config.py", line 16, in create_config config = yaml.safe_load(stream) File "G:\anaconda\envs\GCC\lib\site-packages\yaml\__init__.py", line 162, in safe_load return load(stream, SafeLoader) File "G:\anaconda\envs\GCC\lib\site-packages\yaml\__init__.py", line 112, in load loader = Loader(stream) File "G:\anaconda\envs\GCC\lib\site-packages\yaml\loader.py", line 34, in __init__ File "G:\anaconda\envs\GCC\lib\site-packages\yaml\reader.py", line 85, in __init__ self.determine_encoding() File "G:\anaconda\envs\GCC\lib\site-packages\yaml\reader.py", line 124, in determine_encoding self.update_raw() File "G:\anaconda\envs\GCC\lib\site-packages\yaml\reader.py", line 178, in update_raw data = self.stream.read(size) UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 11: illegal multibyte sequence
这个错误是由于在读取配置文件时使用了错误的编码造成的。根据错误信息,看起来配置文件使用的是GBK编码,而Python默认使用UTF-8编码进行读取。你可以尝试修改代码中的编码方式,将GBK改为UTF-8来解决这个问题。
你可以尝试使用以下代码片段来解决该问题:
```python
import codecs
with codecs.open(args.config_env, 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
```
这样可以使用UTF-8编码来读取配置文件,避免了UnicodeDecodeError错误。请确保将其添加到代码中正确的位置,并替换原始的配置文件读取代码。
希望能帮到你!如果有任何其他问题,请随时提问。
package server import ( "bytes" "encoding/binary" "errors" "time" "github.com/panjf2000/gnet" "github.com/zmicro-team/zmicro/core/log" "github.com/zchat-team/zim/app/conn/protocol" ) type TcpServer struct { gnet.EventHandler addr string codec gnet.ICodec srv *Server } func NewTcpServer(srv *Server, addr string) *TcpServer { ts := new(TcpServer) ts.addr = addr ts.codec = &TcpCodec{} ts.srv = srv return ts } func (s *TcpServer) Start() error { return gnet.Serve(s, s.addr, gnet.WithMulticore(true), gnet.WithTCPKeepAlive(time.Minute*5), gnet.WithCodec(s.codec)) } func (s *TcpServer) Stop() error { //return gnet.Stop(context.Background(), s.addr) return nil } func (s *TcpServer) OnInitComplete(srv gnet.Server) (action gnet.Action) { log.Infof("tcp server is listening on %s (multi-cores: %t, loops: %d)", srv.Addr.String(), srv.Multicore, srv.NumEventLoop) return } func (s *TcpServer) OnOpened(c gnet.Conn) (out []byte, action gnet.Action) { log.Info("TCP OnOpened ...") conn := &Connection{ Status: AuthPending, Conn: c, } c.SetContext(conn) s.srv.OnOpen(conn) return } func (s *TcpServer) OnClosed(c gnet.Conn, err error) (action gnet.Action) { log.Info("TCP OnClose ...") conn, ok := c.Context().(*Connection) if !ok { return } s.srv.OnClose(conn) return } func (s *TcpServer) React(data []byte, c gnet.Conn) (out []byte, action gnet.Action) { conn, ok := c.Context().(*Connection) if !ok { return } s.srv.OnMessage(data, conn) return } // ==================================== Codec ============================================== type TcpCodec struct { } func (_ *TcpCodec) Encode(c gnet.Conn, buf []byte) ([]byte, error) { return buf, nil } func (_ *TcpCodec) Decode(c gnet.Conn) ([]byte, error) { if size, header := c.ReadN(protocol.HeaderLen); size == protocol.HeaderLen { byteBuffer := bytes.NewBuffer(header) var p protocol.Packet if err := binary.Read(byteBuffer, binary.BigEndian, &p.HeaderLen); err != nil { return nil, err } if err := binary.Read(byteBuffer, binary.BigEndian, &p.Version); err != nil { return nil, err } if err := binary.Read(byteBuffer, binary.BigEndian, &p.Cmd); err != nil { return nil, err } if err := binary.Read(byteBuffer, binary.BigEndian, &p.Seq); err != nil { return nil, err } if err := binary.Read(byteBuffer, binary.BigEndian, &p.BodyLen); err != nil { return nil, err } protocolLen := int(protocol.HeaderLen + p.BodyLen) if size, data := c.ReadN(protocolLen); size == protocolLen { c.ShiftN(protocolLen) return data, nil } return nil, errors.New("not enough payload data") } return nil, errors.New("not enough header data") }
这段代码是一个使用 gnet 框架实现的 TCP 服务器,代码中定义了一个 TcpServer 结构体,并实现了 gnet.EventHandler 接口的相关方法。在 TcpServer 中定义了一个 gnet.ICodec 接口的实现 TcpCodec,用于对消息进行编解码。代码中通过读取消息头中的信息来解析出消息体的长度,然后再读取消息体并返回。同时,TcpServer 中还定义了 Start() 和 Stop() 方法来启动和停止服务器。