+static int io_read_packet(void *opaque, uint8_t *buf, int buf_size)
+{
+ AVIOInternal *internal = opaque;
+ return ffurl_read(internal->h, buf, buf_size);
+}
+
+static int io_write_packet(void *opaque, uint8_t *buf, int buf_size)
+{
+ AVIOInternal *internal = opaque;
+ return ffurl_write(internal->h, buf, buf_size);
+}
+
+static int64_t io_seek(void *opaque, int64_t offset, int whence)
+{
+ AVIOInternal *internal = opaque;
+ return ffurl_seek(internal->h, offset, whence);
+}
+
+static int io_read_pause(void *opaque, int pause)
+{
+ AVIOInternal *internal = opaque;
+ if (!internal->h->prot->url_read_pause)
+ return AVERROR(ENOSYS);
+ return internal->h->prot->url_read_pause(internal->h, pause);
+}
+
+static int64_t io_read_seek(void *opaque, int stream_index, int64_t timestamp, int flags)
+{
+ AVIOInternal *internal = opaque;
+ if (!internal->h->prot->url_read_seek)
+ return AVERROR(ENOSYS);
+ return internal->h->prot->url_read_seek(internal->h, stream_index, timestamp, flags);
+}
+