【问题标题】:HTTP live streaming from android device to amazon web server S3从安卓设备到亚马逊网络服务器 S3 的 HTTP 直播
【发布时间】:2014-07-18 12:44:37
【问题描述】:

我想将 android 设备捕获的视频流式传输到亚马逊 S3 服务器。是否只能在 java 中使用,或者我必须使用 JNI 和 FFMPEG。任何示例代码或在线教程/链接。请帮忙。

【问题讨论】:

  • 有可能,但您没有提供足够的信息。首先指定您需要支持的编解码器。
  • Android 设备默认支持的任何编解码器,也可以在 3gp 或 mp4 等 iOS 设备上播放。
  • 我一个多星期以来一直在寻找同样的东西。你能帮我解决这个问题吗?

标签: java android ffmpeg java-native-interface http-live-streaming


【解决方案1】:

我实现的 HTTP 实时流包括录制视频文件(mp4 或其他),然后将其链接添加到 index.m3u8 文件,然后以 tic toc 方式上传。

Here is a project

我用来获取基本逻辑并根据需要对其进行修改。这是将您的文件上传到 AWS S3 的类

package com.example.ffmpegtest;

import java.io.File;

import android.content.Context;
import android.util.Log;

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.ProgressEvent;
import com.readystatesoftware.simpl3r.Uploader;
import com.readystatesoftware.simpl3r.Uploader.UploadProgressListener;

public class S3Client {
    private static final String TAG = "S3Client";

    AmazonS3Client s3;
    Context c;

    String bucket;

    public interface S3Callback{
        public void onProgress(ProgressEvent progressEvent, long bytesUploaded, int percentUploaded);
    }

    public S3Client(Context c, String AWS_KEY, String AWS_SECRET){
        s3 = new AmazonS3Client(new BasicAWSCredentials(SECRETS.AWS_KEY, SECRETS.AWS_SECRET));
        this.c = c;
    }

    /**
     * Set the target S3 bucket of this client. 
     * Must be set before calling upload.
     * @param bucket The name of the target S3 bucket.
     */
    public void setBucket(String bucket){
        this.bucket = bucket;
    }

    /**
     * Begin an upload to S3. Returns the url to the completed upload.
     * @param key Path relative to provided S3 bucket.
     * @param source File reference to be uploaded.
     * @param callback Callback providing upload progress.
     * @return
     */
    public String upload(String key, File source, final S3Callback callback){
        if(bucket == null){
            Log.e(TAG, "Bucket not set! Call setBucket(String bucket)");
            return "";
        }
        Uploader uploader = new Uploader(c, s3, bucket, key, source);
        uploader.setProgressListener(new UploadProgressListener() {         
            @Override
            public void progressChanged(ProgressEvent progressEvent, 
                    long bytesUploaded, int percentUploaded) {
                if(callback != null)
                    callback.onProgress(progressEvent, bytesUploaded, percentUploaded);
            }
        });
        return uploader.start();        
    }


}

您可以查看 HLSRecorder 和 HLSObserver 以持续记录和检查您放置记录文件的目录,以便在完成后上传它们。

您的 index.m3u8 文件将如下所示

    #EXTM3U
#EXTINF:5.0,
http://s3-us-west-2.amazonaws.com/your.bukect.name/filename1.mp4
#EXTINF:5.0,
http://s3-us-west-2.amazonaws.com/your.bukect.name/filename2.mp4

5.0 是视频时长,在我的例子中是 5 秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2011-03-02
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多