1 use bytes::BytesMut; 2 use failure::Fail; 3 4 use libflv::errors::FlvDemuxerError; 5 use rtmp::session::errors::SessionError; 6 7 use networkio::bytes_errors::BytesWriteError; 8 use rtmp::amf0::errors::Amf0WriteError; 9 use rtmp::cache::errors::MetadataError; 10 11 use libmpegts::errors::MpegTsError; 12 use std::fmt; 13 14 // use tokio::sync::mpsc::error::SendError; 15 16 #[derive(Debug)] 17 pub struct ServerError { 18 pub value: ServerErrorValue, 19 } 20 21 #[derive(Debug, Fail)] 22 pub enum ServerErrorValue { 23 #[fail(display = "server error")] 24 Error, 25 } 26 #[derive(Debug)] 27 pub struct MediaError { 28 pub value: MediaErrorValue, 29 } 30 31 #[derive(Debug, Fail)] 32 pub enum MediaErrorValue { 33 #[fail(display = "server error")] 34 Error, 35 #[fail(display = "session error")] 36 SessionError(SessionError), 37 #[fail(display = "amf write error")] 38 Amf0WriteError(Amf0WriteError), 39 #[fail(display = "metadata error")] 40 MetadataError(MetadataError), 41 #[fail(display = "flv demuxer error")] 42 FlvDemuxerError(FlvDemuxerError), 43 #[fail(display = "mpegts error")] 44 MpegTsError(MpegTsError), 45 46 #[fail(display = "ts write error")] 47 TsError(TsError), 48 } 49 50 impl From<SessionError> for MediaError { 51 fn from(error: SessionError) -> Self { 52 MediaError { 53 value: MediaErrorValue::SessionError(error), 54 } 55 } 56 } 57 58 impl From<FlvDemuxerError> for MediaError { 59 fn from(error: FlvDemuxerError) -> Self { 60 MediaError { 61 value: MediaErrorValue::FlvDemuxerError(error), 62 } 63 } 64 } 65 66 impl From<MpegTsError> for MediaError { 67 fn from(error: MpegTsError) -> Self { 68 MediaError { 69 value: MediaErrorValue::MpegTsError(error), 70 } 71 } 72 } 73 74 impl From<Amf0WriteError> for MediaError { 75 fn from(error: Amf0WriteError) -> Self { 76 MediaError { 77 value: MediaErrorValue::Amf0WriteError(error), 78 } 79 } 80 } 81 82 impl From<MetadataError> for MediaError { 83 fn from(error: MetadataError) -> Self { 84 MediaError { 85 value: MediaErrorValue::MetadataError(error), 86 } 87 } 88 } 89 90 impl From<TsError> for MediaError { 91 fn from(error: TsError) -> Self { 92 MediaError { 93 value: MediaErrorValue::TsError(error), 94 } 95 } 96 } 97 98 impl fmt::Display for MediaError { 99 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 100 fmt::Display::fmt(&self.value, f) 101 } 102 } 103 104 pub struct HlsError { 105 pub value: HlsErrorValue, 106 } 107 108 #[derive(Debug, Fail)] 109 pub enum HlsErrorValue { 110 #[fail(display = "server error")] 111 Error, 112 #[fail(display = "session error")] 113 SessionError(SessionError), 114 #[fail(display = "amf write error")] 115 Amf0WriteError(Amf0WriteError), 116 #[fail(display = "metadata error")] 117 MetadataError(MetadataError), 118 #[fail(display = "flv demuxer error")] 119 FlvDemuxerError(FlvDemuxerError), 120 #[fail(display = "media error")] 121 MediaError(MediaError), 122 } 123 124 impl From<MediaError> for HlsError { 125 fn from(error: MediaError) -> Self { 126 HlsError { 127 value: HlsErrorValue::MediaError(error), 128 } 129 } 130 } 131 132 impl From<SessionError> for HlsError { 133 fn from(error: SessionError) -> Self { 134 HlsError { 135 value: HlsErrorValue::SessionError(error), 136 } 137 } 138 } 139 140 impl From<FlvDemuxerError> for HlsError { 141 fn from(error: FlvDemuxerError) -> Self { 142 HlsError { 143 value: HlsErrorValue::FlvDemuxerError(error), 144 } 145 } 146 } 147 148 impl From<Amf0WriteError> for HlsError { 149 fn from(error: Amf0WriteError) -> Self { 150 HlsError { 151 value: HlsErrorValue::Amf0WriteError(error), 152 } 153 } 154 } 155 156 impl From<MetadataError> for HlsError { 157 fn from(error: MetadataError) -> Self { 158 HlsError { 159 value: HlsErrorValue::MetadataError(error), 160 } 161 } 162 } 163 164 impl fmt::Display for HlsError { 165 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 166 fmt::Display::fmt(&self.value, f) 167 } 168 } 169 #[derive(Debug, Fail)] 170 pub struct TsError { 171 pub value: TsErrorValue, 172 } 173 174 impl fmt::Display for TsError { 175 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 176 fmt::Display::fmt(&self.value, f) 177 } 178 } 179 180 #[derive(Debug, Fail)] 181 pub enum TsErrorValue { 182 #[fail(display = "write file error")] 183 IOError(std::io::Error), 184 } 185 186 impl From<std::io::Error> for TsError { 187 fn from(error: std::io::Error) -> Self { 188 TsError { 189 value: TsErrorValue::IOError(error), 190 } 191 } 192 } 193