标签: m3u8

无法从 AVURLAsset 获取 AVPlayer 的 HLS 视频(.m3u8 格式)的视频轨道?

我正在开发一个自定义视频播放器来从服务器流式传输 HLS 视频。我可以使用 AVPlayerItem 和 AVPlayer 成功播放 HLS 视频。

之后我想为我的视频播放器添加字幕轨道和音轨。所以我使用 AVMutableComposition 来做到这一点。所以现在的问题是,当我为 HLS 视频创建 AVURLAsset 时,我无法从 AVURLAsset 获取视频轨道。它总是给我 0 个曲目。我尝试了 AVURLAsset 的“loadValuesAsynchronously”,并尝试为 AVPlayerItem 的“轨道”添加 KVO。但这些都没有给我带来任何积极的结果。

我正在使用以下代码。

  func playVideo() {
    let videoAsset = AVURLAsset(url: videoURL!)
    let composition = AVMutableComposition()
    // Video
    let videoTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
    do {
        let tracks = videoAsset.tracks(withMediaType: .video)
        guard let track = tracks.first else {
            print("Can't get first video track")
            return
        }
        try videoTrack?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), of: track, at: kCMTimeZero)
    } catch {
        print(error)
        return …
Run Code Online (Sandbox Code Playgroud)

avfoundation avplayer m3u8 swift avkit

8
推荐指数
1
解决办法
2137
查看次数

带有m3u8网址的Chromecast SDK

我已经设置了SDK附带的示例Web服务器(https://github.com/googlecast/),它可以使用它们提供的示例媒体文件.当我尝试使用示例m3u8文件时,它失败了:

{"code":"session_error","description":"LOAD_FAILED","details":null}`
Run Code Online (Sandbox Code Playgroud)

两个URL在Safari中加载正常.是否不支持此类流媒体?有没有办法获得更详细的错误消息.

javascript m3u8 google-cast chromecast

7
推荐指数
1
解决办法
2906
查看次数

在iOS上播放.m3u8文件

我有.m3u8链接,我需要发挥iOS支持HLS Protocol.

当我直接将URL分配给MPMoviePlayerController和播放时,视频不可见,但我可以听到音频.

NSURL *movieURL = [NSURL URLWithString:@"http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"];
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
[self.view addSubview:self.moviePlayer.view];

if (mp)
{
    // save the movie player object
    self.moviePlayer = mp;
    [self.moviePlayer setFullscreen:YES];

    // Play the movie!
    [self.moviePlayer play];
}
Run Code Online (Sandbox Code Playgroud)

我还需要做些iOS什么?

video http-live-streaming ios m3u8

7
推荐指数
1
解决办法
1万
查看次数

从ios上的hls流解码音频样本?

我正在尝试从iOS设备上的远程HLS(m3u8)流中解码音频样本,以便进一步处理数据,例如记录到文件.使用参考流http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8.

通过将AVURLAsset与AVPlayer结合使用,我可以在CALayer上将视频显示为预览.我还可以使用AVPlayerItemVideoOutput获取原始视频数据(CVPixelBuffer).音频也可以通过iOS设备的扬声器进行测量.

这是我目前用于AVURLAsset和AVPlayer的代码:

NSURL* url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
NSString *tracksKey = @"tracks";

[asset loadValuesAsynchronouslyForKeys:@[tracksKey] completionHandler: ^{

    dispatch_async(dispatch_get_main_queue(), ^{

        NSError* error = nil;
        AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error];

        if (status == AVKeyValueStatusLoaded) {
            NSDictionary *settings = @
            {
                (id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA),
                @"IOSurfaceOpenGLESTextureCompatibility": @YES,
                @"IOSurfaceOpenGLESFBOCompatibility": @YES,
            };
            AVPlayerItemVideoOutput* output = [[AVPlayerItemVideoOutput alloc] initWithPixelBufferAttributes:settings];
            AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:asset];
            [playerItem addOutput:output];
            AVPlayer* player = [AVPlayer playerWithPlayerItem:playerItem];
            [player setVolume: 0.0];    // no preview audio
            self.playerItem = …
Run Code Online (Sandbox Code Playgroud)

http-live-streaming ios m3u8

7
推荐指数
0
解决办法
1550
查看次数

玩video.js ustream m3u8文件流

我试图在一个网页上播放一个m3u8文件流与video.js,但我不能这样做,我不知道错误在哪里

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Video</title>

  <link href="http://vjs.zencdn.net/4.12/video-js.css" rel="stylesheet">
  <script src="http://vjs.zencdn.net/4.12/video.js"></script>
 <script src="https://github.com/videojs/videojs-contrib-media-sources/releases/download/v0.1.0/videojs-media-sources.js"></script>
  <script src="https://github.com/videojs/videojs-contrib-hls/releases/download/v0.11.2/videojs.hls.min.js"></script>

</head>
<body>
  <h1>Video</h1>

  <video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="640" height="268" 
  data-setup='{}'>
    <source src="http://iphone-streaming.ustream.tv/uhls/3064708/streams/live/iphone/playlist.m3u8" type='video/mp4'>
  </video>

  <script>
  </script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

javascript streaming html5 video.js m3u8

7
推荐指数
1
解决办法
3万
查看次数

在播放m3u8视频流之前如何获取帧图像?的iOS

我有一个需求:在播放视频流(m3u8)之前获取帧图像,作为视频预览显示。我使用AVPlayerItemVideoOutpu copyPixelBufferForItemTime:itemTimeForDisplay:仅当播放视频流以获取帧图像时,您还有其他方法吗?谢谢!!

这是我的代码:

CMTime itemTime = self.playerItem.currentTime;
CVPixelBufferRef pixelBuffer = [_playerItemVideoOutput copyPixelBufferForItemTime:itemTime itemTimeForDisplay:nil];
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIContext *temporaryContext = [CIContext contextWithOptions:nil];
CGImageRef videoImage = [temporaryContext
                                 createCGImage:ciImage
                                 fromRect:CGRectMake(0, 0,
                                                     CVPixelBufferGetWidth(pixelBuffer),
                                                     CVPixelBufferGetHeight(pixelBuffer))];

UIImage *uiImage = [UIImage imageWithCGImage:videoImage];
CGImageRelease(videoImage);
NSLog(@"uiImage?%@", uiImage);
Run Code Online (Sandbox Code Playgroud)

iphone frame video-streaming ios m3u8

7
推荐指数
1
解决办法
1419
查看次数

FFmpeg多线程如何下载m3u8文件中的ts段?

我是用ffmpeg下载m3u8文件中的ts合并成mp4文件的?用下面的命令行?

ffmpeg -i <source m3u8 file> -c copy target.mp4
Run Code Online (Sandbox Code Playgroud)

虽然可以运行,但是我发现下载速度很慢,带宽利用率很低,所以想知道ffmpeg是否可以设置为多线程下载以加快下载速度?

multithreading ffmpeg http-live-streaming m3u8

7
推荐指数
0
解决办法
2230
查看次数

如何在浏览器中将 m3u8 URL 转换为 mp4 可下载文件?

我正在编写一个扩展程序以从网站下载视频。该网站有mp4文件和m3u8文件。我已经实现了直接下载mp4文件的部分。我坚持将m3u8文件转换为mp4. 我尝试了很多js包,但是有很多依赖项,即使使用后也失败了browserfy

当前的 popup.js 文件

function loadvideoList(callback){
    chrome.storage.sync.get(['courseID'], function(result) {
        if(result.courseID != 'undefined'){
            $.ajax({
                type: 'GET',
                url: "http://localhost:80/get_videos_list/"+result.courseID,
                crossDomain: true,
                success: function(response) {
                    document.getElementById("loading_icon").style.display='none';
                    document.getElementById("videos_list").style.display='block';
                    document.getElementById("videos_list").style.padding='10px';
                    for(var i = 0; i < response.video_list.length; i++){
                        if(response.video_list[i].type == 'mp4'){
                            handleDownloadButton(response.video_list[i]);
                        }else{
                            // ************ HERE ***************
                            handleDownloadButton-m3u8Tomp4(response.video_list[i].video_url)
                        }
                    }
                },
                error: function (err) {
                    alert("unexpected error occured: "+err.code);
                    console.log(err);
                }
             });
        }else{
            document.getElementById("videos_list").style.display='none';
            document.getElementById("videos_list").style.padding='0';
        }
    });
}

function handleDownloadButton(json_vid){
    var node …
Run Code Online (Sandbox Code Playgroud)

javascript mp4 converters google-chrome-extension m3u8

7
推荐指数
1
解决办法
7530
查看次数

linux:m3u8:如何从 .m3u8 中列出的片段手动下载和创建 mp4

我有一个 .m3u8 网址,即http://example.com/test.m3u8

我可以通过ffmpeg命令下载它:

ffmpeg -y -loglevel verbose -i "http://example.com/test.m3u8" -c copy -f mpegts test.mp4
Run Code Online (Sandbox Code Playgroud)

但我正在尝试手动执行此操作:

我尝试了以下方法:

1)下载m3u8文件:

wget -O test.m3u8 "http://example.com/test.m3u8"
Run Code Online (Sandbox Code Playgroud)

2)然后将每个段下载到一个文件夹中:

aria2c -i test.m3u8
Run Code Online (Sandbox Code Playgroud)

这将下载文件夹中的所有 .ts 文件。

3)然后我把它们结合起来

cat *.ts > out.ts
Run Code Online (Sandbox Code Playgroud)

4)然后我尝试转换为mp4:

$ ffmpeg -i out.ts -c:v libx264 outputfilename.mp4
ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.3.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg …
Run Code Online (Sandbox Code Playgroud)

linux bash ffmpeg aria2 m3u8

6
推荐指数
3
解决办法
8247
查看次数

如何用exoplayer播放m3u8,屏幕一直黑屏

尝试使用 exoplayer v2.10.5 播放 m3u8 时变黑,这让我添加或如何使用 exoplayer v2.10.5 和 gradle 3.5.3 播放 m3u 或哪个版本的 exoplayer 可以与 api 28 和 gradle 3.5.3 配合使用

如果你能帮助我适应代码或解释它,那就更好了,我开始这样做,这将是一个帮助,mp4 播放没有问题。

import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;

import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.Util;

import androidx.appcompat.app.AppCompatActivity;


/**
 * A fullscreen activity to play audio or video streams.
 */
public class PlayerActivity extends AppCompatActivity {

  private PlayerView playerView;
  private SimpleExoPlayer player;
  private boolean playWhenReady=true;
  private long playbackPosition=0; …
Run Code Online (Sandbox Code Playgroud)

android m3u8 exoplayer2.x

6
推荐指数
1
解决办法
9250
查看次数