diff --git a/lib/ffmpeg_api/src/api.rs b/lib/ffmpeg_api/src/api.rs
index d84f9bc500588e5a3147ce8689065549a889ff54..233eb320c9f8683ef205748f35648c5f92c0f137 100644
--- a/lib/ffmpeg_api/src/api.rs
+++ b/lib/ffmpeg_api/src/api.rs
@@ -60,27 +60,13 @@ impl AVFormatContext {
         Ok(AVInputFormat::new(base))
     }
 
-    pub fn streams(&self) -> Vec<AVStream> {
-        Vec::from(unsafe {
-            std::slice::from_raw_parts((*self.base).streams, (*self.base).nb_streams as usize)
-        })
-        .iter()
-        .filter_map(|stream: &*mut ffi::AVStream| unsafe { (*stream).as_mut() })
-        .map(|stream| AVStream::new(stream))
-        .collect()
-    }
-
-    pub fn find_stream<P>(&self, predicate: P) -> Option<AVStream>
-    where
-        P: FnMut(&AVStream) -> bool,
-    {
-        Vec::from(unsafe {
+    pub fn streams(&self) -> impl Iterator<Item = AVStream> {
+        unsafe {
             std::slice::from_raw_parts((*self.base).streams, (*self.base).nb_streams as usize)
-        })
+        }
         .iter()
         .filter_map(|stream: &*mut ffi::AVStream| unsafe { (*stream).as_mut() })
         .map(|stream| AVStream::new(stream))
-        .find(predicate)
     }
 
     pub fn read_frame(&mut self, packet: &mut AVPacket) -> Result<(), Error> {
diff --git a/src/lib.rs b/src/lib.rs
index e86963fa641ee114fb3658646c7c93939ea2f0db..9a3461804a10e89c1e759c8fd13a9f52992d9d3d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,4 +1,5 @@
 #![allow(dead_code)]
+
 pub mod spritesheet;
 pub mod stream_metadata;
 
@@ -40,7 +41,8 @@ pub fn extract(
     );
 
     let mut stream: AVStream = avformat_context
-        .find_stream(|stream| {
+        .streams()
+        .find(|stream| {
             if let Ok(codec_parameters) = stream.codec_parameters() {
                 return codec_parameters.codec_type() == AVMediaType::Video;
             }